Android-flow

Streams lehetővé teszi, hogy több feladatot egyszerre anélkül, hogy zavarnák egymást, ami lehetővé teszi, hogy hatékonyan használja a rendszer erőforrásait. Streams használják azokban az esetekben, amikor az egyik hosszú lejátszási fellépés nem zavarja a többi tevékenységet. Például, van egy zenelejátszó lejátszás és szüneteltetés gomb. Ha megnyomja a lejátszás gombra, és futtat egy zenefájlt egy külön téma, akkor nem nyomja meg a szünet gombot, amíg a fájl egészben. Patakok, akkor ezt a korlátozást.







Használata háttér szálak

Az biztos, hogy az alkalmazás nem veszít a társadalom, egy jó megoldás az lenne, hogy all lassú, munkaigényes művelet a fő alkalmazási áramlását a gyermek.

Minden alkatrész az alkalmazás az Android, beleértve a tevékenységek, szolgáltatások és vevőkészülékek szándékok, elkezdenek dolgozni a fő alkalmazási menet. Ennek eredményeként a munkaerő-igényes műveletek ezeket az alkatrészeket blokkolja az összes többi alkalmazás, beleértve a szolgáltatások és tevékenységek az előtérben.

Használata háttér szálak - előfeltétele, ha el akarjuk kerülni a párbeszédablak kényszeríteni az alkalmazás zárva. Amikor aktív Android 5 másodpercig nem reagál a felhasználói eseményekre (például egy gomb megnyomásával), vagy a vevő sugárzott szándék nem áll le onReceive handler () 10 másodpercen belül, úgy tekintjük, hogy az alkalmazás leállt. minden áron elkerülni az ilyen helyzeteket. Használja háttér szálak minden munkaigényes tevékenységek, mint például a munka fájlok, a hálózati kéréseket, tranzakciók, az adatbázisok és bonyolult számításokat.

Android biztosít több mechanizmus mozgató funkciókat a háttérben.

  • Activity.runOnUiThread (Futtatható)
  • View.post (Futtatható)
  • View.postDelayed (Futtatható, hosszú)
  • rakodók
  • AsyncTask

Bár a AsyncTask - jó döntés volt, akkor előfordul, hogy a munka a háttérben szükséges, hogy saját áramlások és kezelni őket.

Java van egy standard osztály szál. amelynek segítségével az alábbiak szerint:

Ez a módszer alkalmas csak a műveleteket társított időt. De nem lesz képes frissíteni a grafikus felületet.

Ha frissíteni kell a program interfész, akkor kell használni AsyncTask. Ez a fent említett, illetve akkor végre a saját osztálya származó szál. Segítségével Handler tárgya android.os csomag szinkronizálni a GUI-patak előtt frissíti a felhasználói felület.







Hozhat létre process, és kezelje azokat a Handler osztályban. valamint az osztályok áll a névtérben java.lang.Thread. Az alábbiakban egy egyszerű keret az átadás műveletek a gyermek menet.

helytelen alkalmazása

Mi írjuk a „rossz” alkalmazás a rossz fő áramlását. Egyik nap írt egy programot, hogy számít a varjak. Ebben az időben, azt feltételezzük, hogy a fekete macska, hogy halad át az utunk. Miért csinálják - a tudomány hallgat. Statisztikák lehet gyűjteni, hogy segítsen megoldani a rejtélyt. Add gombot a képernyőn, aktivitás és szöveges címkét. A kódot az gombra kattintva.

Szimulált nehéz munkaprogram szünetel húsz másodpercig, majd megjeleníti a szöveget a számlálás macskák. Ha megnyomja a gombot, és várjon húsz másodpercet, akkor a program a várt módon működnek. De elképzelhető, hogy megnyomta-e a gombot. A program elindult szünet. Nem vár a végén a szünet, nyomja meg a gombot. A program fut a csapat, de az előző parancsot még nem teljesült, és ott jön a konfliktus. Próbálja meg a gombot néhányszor néhány megszakításokkal. Egy bizonyos ponton, lefagy az alkalmazás, és megjeleníti a rendszer párbeszédablak:

Android-flow

A valós alkalmazások ezt az ablakot is zavarja a felhasználót, és ő tesz egy rossz pontszámot az alkalmazás.

Meg kell mozgatni az időigényes feladat egy külön téma. Mert ez az osztály példányai futtatható. amely egy run () módszer. Következő téma objektum jön létre. A tervező, aki megalkotta megadott futtatható. Ezt követően egy új folyam elindítható start () metódust. Átírni példa.

Minden kód átköltöztünk a run () metódust. Most már megállás nélkül, hogy kattintson a gombra. Ekkor az alkalmazás megőrzi teljesítményét. Hogy ez a kód, naplózás Log.i () naplók. Minden alkalommal, amikor rákattint, akkor hozzon létre egy új szálat, amely végrehajtja kódot. Streams nem zavarják egymást, és várakoznak, a rendszer lehetővé teszi számukra, hogy működik.

Kellett egy közvetítő között létrejött patak és a fő UI-patak. A szerepe a mediátor egy Handler osztály (teljes név android.os.Handler osztály. Ne keverje). Létre kell hozni egy példányt az osztályból, és adja meg a kódot, hogy végre kell hajtani.

Miután a kódsor Log.i () metódus, adjunk hozzá egy hívást, hogy egy közvetítő.

Takarmány egy közvetítő, aki viszont frissíti a felületen. Ebben az esetben a közvetítő küld egy üres üzenetet a patak.

De ez úgy történik, hogy az áramlás szükséges ahhoz, hogy az információ feldolgozására. Az alábbiakban egy egyszerűsített példa.

futó patak

Tegyük fel, hogy dolgozzon ki egy egyedi játékos. Van egy Play gombot. ami a lejátszás () metódus zenélni:

Most a módszer alkalmazása egy másik téma. Először is, egy új szálat hoz létre. Ezután egy futtatható objektum konstruktor patak. És hívjuk a lejátszás () metódus a saját előállítású fluxus. És végül, indul egy szál.

szünet hírcsatorna

Néha szükség van, hogy átmenetileg leállítja az áramlást ( „elaltatni”):

prioritás áramlások

setPriority () metódus lehet beállítani az elsődleges folyamat. ami miatt indul áramlását. A prioritás értéke változhat Thread.MIN_PRIORITY (1) Thread.MAX_PRIORITY (10):

Megszakítása az áramlás

Flux van a stop () metódust. de használata nem ajánlott, mert elhagyja a kérelem egy bizonytalan állapot. Általában ezt a megközelítést alkalmazzák:

Van egy másik módja, ha az összes váltott flow bejelentett démonok. Ebben az esetben az összes nyitott patakok automatikusan kitölteni a végén a fő alkalmazási áramlását:




Kapcsolódó cikkek