Folyamatok és szálak, android fejlesztők

Amikor egy alkalmazás összetevő elindítása hiányában más dolgozó alkatrészeket. Android Linux elindítja új eljárás alkalmazásának egyetlen végrehajtási szál. Alapértelmezésben az összes komponenst egyetlen alkalmazás fut egyetlen folyamat, és egy patak (az úgynevezett „fő téma”). Ha egy összetevő elindítása jelenlétében egy eljárás az alkalmazás (mivel van egy másik eleme az alkalmazás), akkor a komponens kezdődött a folyamat, és ugyanarra a menet. Azonban lehetséges, hogy megszervezze a végrehajtását más alkalmazás komponensek külön folyamatok, és hozzon létre egy újabb szál bármilyen folyamatot.







Ez a dokumentum bemutatja a munkafolyamatok és a szálak a Android app.

Alapértelmezésben az összes komponenst az azonos alkalmazás fut ugyanaz a folyamat, és a legtöbb alkalmazás nem kell változtatni ezt a viselkedést. Azonban, ha szükséges, hogy ellenőrizzék, hogy melyek a folyamat tartozik egy adott komponens, ez lehet tenni a nyilvánvaló fájlt.

Felvételi nyilvánvaló minden típusú komponens elemek - . . és -Támogatja attribútum android: folyamatban. amely lehetővé teszi, hogy állítsa be a folyamatot, amellyel elvégezhető az alkatrész. Ez az attribútum lehet állítani úgy, hogy az egyes összetevők végre a saját folyamatát, vagy úgy, hogy csak néhány összetevőre osztozik egy folyamat. Lehetőség van arra is, hogy konfigurálja a folyamat android: folyamat, így az alkatrészek különböző alkalmazások végzett egy folyamat, feltéve, hogy az alkalmazások ugyanazt a Linux felhasználói azonosítót és működnek a bemeneti egységes tanúsítványt.

elem is támogatja attribútum android: folyamatban. amely lehetővé teszi, hogy az alapértelmezett értéket, amely az összes komponens.

Android képes megállítani a folyamatot egy bizonyos ponton, ha nincs elég memória, és szükség van más folyamatok szolgálják, hogy a felhasználó az adott pillanatban. Job alkalmazás komponensek futó folyamat, következetesen leáll. Az eljárás ezen komponensek újraindul, amikor a munka jön nekik.

Amikor a döntés a felmondás folyamat, Android rendszer súlya relatív fontos a felhasználó számára. Például, annál valószínűbb, off folyamatok tartalmazó lépéseket, amelyek nem jelennek meg a képernyőn, míg az eljárás a következő lépésekből látható. Következésképpen, a megoldás a megszakítás folyamat függ az alkalmazott komponensek a folyamatban. Az alábbiakban beszéljük szabályok alapján, amelyek a döntés a választott megszakítható folyamatokat.

Az életciklus folyamat

Android rendszer igyekszik tartani a jelentkezési folyamat, amennyire csak lehetséges, de végül el kellett távolítani a régi folyamatokat, hogy visszaszerezze a memória új vagy fontosabb folyamatokat. Annak meghatározására, amely feldolgozza megtartani, és amely törölni, a rendszer helyezi minden folyamatot a „hierarchia fontos” összetevők alapján, hogy fut a folyamat, és az állapotát az alkatrészeket. Eljárások a legalacsonyabb szint fontos elsősorban kizárt, majd a következő eljárások megszűnnek, és így a szint fontos. G. szükséges mértékben helyreállítani a rendszer erőforrásait.

A hierarchia fontos, van öt szinten. Az alábbi lista a különböző folyamatok fontossági sorrendben (az első folyamat a legfontosabb és eltávolították az utolsó):

  1. Process előtérben

Eljárás szükséges a felhasználó aktuális aktivitását. A folyamat az előtérben folyamat, ha bármelyik a következő feltételeknek:

  • Ez tartalmazza Activity akció. amellyel a felhasználó kölcsönhatásba lép a (okozott Activity onResume () módszer).
  • Ez tartalmazza a szolgáltatás. működésével kapcsolatos, amellyel a felhasználó használja.
  • Ez tartalmazza a szolgáltatás. amely végzik „az előtérben” - nevű szolgáltatást startForeground ().
  • Ez tartalmazza a szolgáltatás. amely elvégzi az egyik visszahívók életciklus (onCreate (). onStart () vagy onDestroy ()).
  • Ez tartalmazza BroadcastReceiver vevő. amely ellátja onReceive () módszer.

Általában ugyanakkor ez a munka csak néhány előtérben folyamatot. Ezek megsemmisítése csak a legvégső esetben, ha a memória olyan alacsony, hogy nem tudnak tovább együtt dolgozni. Általában ezen a ponton az eszköz elérte a memória partíció állapotát az oldalon, így a felhasználói felület reagált a felhasználói műveletekre, akkor törölnie kell néhány folyamatok az előtérben.

Folyamatokat, amelyek nem tartalmazzák az előtérben elemek, de befolyásolhatja a kijelző a képernyőn. Az eljárás akkor tekinthető látható, ha az alábbi feltételek:

  • Ez tartalmazza Activity akció. ami nem az előtérben, de az látható, hogy a felhasználói (ún onPause () metódus). Például, ez a probléma akkor fordulhat elő, ha a kereset az előtérben a Futtatás párbeszédpanelt, amely lehetővé teszi, hogy az előző lépésben mögötte.
  • Ez tartalmazza a szolgáltatás. társított látható intézkedésekre vagy új ismeretek.

A látható folyamatot tartják rendkívül fontos, akkor el kell távolítani, ha el szeretné menteni a munka minden előtérben folyamatot.

Az eljárás a következő lépéseket tartalmazza, amelyek nem látható a felhasználó számára jelenleg (úgynevezett onStop () eljárási lépések). Ezek a folyamatok nincs közvetlen hatással a felhasználó és a rendszer képes eltávolítani őket bármikor felszabadítani memória egy előtér folyamat látható, vagy szolgáltatási folyamat. Általában sokat tett a háttér folyamatok, így ezek tárolják az FVT listán (legutóbb használt) eljárások, amelyek a legutóbbi intézkedések, amelyeket a felhasználó látta, eltávolítjuk a múlt. Ha megfelelően végrehajtott intézkedések életciklus módszereket, és a cselekvés elmenti a jelenlegi állapot, az eltávolítási folyamatot, ezt a műveletet nincs nyilvánvaló hatása van a felhasználói élmény, hogy amikor a felhasználó visszatér ez a fellépés, hogy helyreállítja az összes elemet a vizuális állapotát. További információ a mentés és visszaállítása az állam látni. Hozzászólások a dokumentumban.

Process, hatóanyagot nem tartalmazó alkalmazás komponensek. Az egyetlen ok, hogy fenntartsák a folyamat ez a fajta - az elrejtés, ami javítja a következő indításkor komponens ebben a folyamatban. A rendszer eltávolítja ezeket a folyamatokat gyakran egyenletesen oszoljon el az összes rendszer erőforrásait a folyamat a gyorsítótár és a cache alapvető sejtmagban.

Android rendszer eljárás, amely vonatkozik a legmagasabb szinten alapuló fontosságát, hogy a komponensek aktív a folyamat az aktuális időt. Például, ha az eljárás tartalmaz egy olyan szolgáltatást látható hatása, az eljárást nem tartják nyilvánvaló, és nincs hivatalos eljárás.

Továbbá az eljárás sebessége növelhető, mert vannak más folyamatok, amelyek függenek rajta. Például az eljárás szolgáló másik folyamat nem lehet egy szinttel lejjebb a szint a kiszolgált folyamatot. Például, ha egy tartalomszolgáltató a folyamat az ügyfél kiszolgálásával A B vagy üzleti folyamat társul eleme a B folyamat, a folyamat egy mindig kell tekinteni, nem kevésbé fontos, mint a folyamat B.







Mivel a folyamat a szolgáltatás teljesítése, becslések fenti folyamat a háttérben akció, akció, abban a hosszú távú működés, lehet kezdeni a szolgáltatás működéséhez szükséges, és nem csak, hogy hozzon létre egy munkafolyamatot, különösen abban az esetben a művelet hosszabb időt vesz igénybe a lépéseket. Például a cselekvés lehet képeket feltölteni, hogy egy weboldalt kell kezdeni a szolgáltatást a letöltés, úgy, hogy a terhelés a háttérben folytatódik után is a felhasználó bejelentkezik ki hatását. A szolgáltatás használata biztosítja, hogy a művelet elsőbbséget minimum „szolgáltatási folyamat”, függetlenül attól, hogy mi történik a cselekvés. Emiatt vevők kell használni a szolgáltatást, nem csak, hogy a működési folyamatot, időigényes elvégzésére.

Amikor az alkalmazás elindul, a rendszer létrehoz végrehajtásának folyamatát az alkalmazás, amely az úgynevezett „fő”. Ez az anyag nagyon fontos, mivel ez felel ütemezésére események a megfelelő kütyü a felhasználói felület, beleértve a grafikus ábrázolása az események. Ő is egy áramlás, amely az alkalmazás együttműködik összetevői egy sor egyedi Android felület eszközei (komponensei csomagok és android.widget android.view). Lényegében a fő stream - ez az, ami néha a UI szál.

A rendszer egy különálló szálat minden egyes komponens például. Minden komponensek, amelyeket végre egy folyamat, hozzon létre esetekben a UI szál, és a rendszer kéri, küldünk minden eleme, hogy a patak. Ezért módszereket, amelyek reagálnak a rendszer visszahívások (például onkeydown () metódus, hogy jelentse a felhasználó intézkedéseket vagy fordított életciklus metódus hívás) mindig végre az áramlás egy felhasználói felület folyamat.

Például, amikor a felhasználó megnyom egy gombot a képernyőn, az UI szál az alkalmazás elküldi a sajtó a modulban, ami viszont meghatározza a gombot, és küld egy kérést, hogy töröljék el az esemény várakozási sorba. UI szál megszünteti a kérelmet a sorból, és értesíti a widget, hogy jelenjen meg újra.

Amikor egy alkalmazás végez intenzív munka válaszul egy felhasználói beavatkozás, ez az egyetlen áramlási modell mutathatnak gyenge teljesítmény, ha az alkalmazás helytelenül alkalmazzák. Azaz, ha minden úgy történik, az UI szál, a kivitelezés a hosszú távú műveletek, mint például a hálózati hozzáférést, lekérdezést az adatbázis, blokkolja a teljes felhasználói felület. Amikor az áramlás blokkolva van, nem lehet feldolgozni olyan esemény, beleértve a megjelenített változás esetén. A szempontból a felhasználói alkalmazás néz, nem válaszol. Még rosszabb, ha a UI szál blokkolva legfeljebb néhány másodpercig (jelenleg körülbelül 5 másodpercig), akkor megjelenik egy párbeszédablak hírhedt „nem válaszol”. Ezután elégedetlen felhasználó kilép az alkalmazásból, és távolítsa el.

Ezen kívül egy sor felhasználói felület eszközei Andoid nem szál biztonságos. Ezért, ha nem működik együtt a felhasználói felület a munkafolyamat. Manipulálni a felhasználói felület kell végezni a UI szál. Így már csak két szabályt egyetlen szálon modell Android:

  1. Ne takarja el a UI szál
  2. Ne érintse meg az eszköztár Android felhasználói felület kívül UI szál

munkafolyamatok

Mivel a fent leírt egyszálú modell dinamikus felhasználói felület az alkalmazások nagyon fontos, hogy ne takarja el a UI szál. Ha szükséges műveleteket végez némi időre van szükség, hogy végre őket külön szálon ( „háttér” vagy „dolgozik” fluxus).

Például a következő sürgető ellenőrző kódot, amely betölti a kép a részleges áramlású és megjeleníti azokat a widget Kamerák:

Első pillantásra úgy kell működnie, hiszen létrehoz egy új szál kezeli a hálózati műveleteket. Azonban ez megtöri a második szabály, egyetlen szálon modell: nem utal egy sor eszközt Android felhasználói felület kívül UI szál - ez például megváltoztatja a Kamerák a munkafolyamat helyett UI szál. Ez ahhoz vezethet, hogy a bizonytalanság és kiszámíthatatlan viselkedés, amelyet nehéz lenne nyomon követni.

A probléma megoldásához Android számos módon lehet elérni a UI szál más szálak. Az alábbi lista a hasznos módszerek:

Például, lehetséges, hogy korrigálja a kódot a fenti módszerrel View.post (futtatható):

Most végrehajtása menet: hálózati műveletet végzünk egy egycsatornás mivel Kamerák fut a UI szál.

Ugyanakkor, mivel ez egy összetett típusú kódot zavaró lehet, és nehéz fenntartani. Annak érdekében, hogy kezelni bonyolultabb kölcsönhatások a munkaközeg lehet használni Handler eljárás munkafolyamat feldolgozására kapott üzeneteket UI szál. Talán a legjobb megoldás az, hogy kiterjeszti az osztály AsyncTask. amely egyszerűsíti a munkafolyamat feladatot kell lépni a felhasználói felület.

használata AsyncTask

AsyncTask módszer lehetővé teszi az aszinkron művelet a felhasználói felületen. Ez működik egy blokkoló szálat, majd közzététele az eredményeket a UI téma anélkül, hogy egymástól függetlenül eljárási áramok és / vagy a rakodók.

Mert ezzel a módszerrel meg kell létrehozni és végrehajtani egy alosztály AsyncTask visszahívási eljárás doInBackground (). aki dolgozik a medencében háttér szálak. Kell ismerniük onPostExecute () metódus, hogy frissítse a felhasználói felület. amely biztosítja az eredménye doInBackground (), és fut az UI szál, így nyugodtan frissíti a felhasználói felület. A feladatot a hívó execute () metódus a UI szál.

Például, lehetséges, hogy megvalósítsa a fenti példa keresztül AsyncTask módszerrel a következőképpen:

Most a felhasználói felület védett és a kód könnyebb lett, mert a munka van osztva egy része, amit meg kell tenni a munkafolyamatot, és az a része, amit meg kell tenni a UI szál.

Olvassa el a cikket AsyncTask. hogy teljes mértékben megértsék a használata ebben az osztályban. Itt egy rövid áttekintést a munkáját:

  • Megadhatja, hogy milyen típusú paraméter, az értékek a végrehajtás és a végső referenciaérték révén univerzális alkatrészek
  • doInBackground () módszer automatikusan végrehajtott a munkafolyamat
  • onPreExecute () módszerek. onPostExecute () és onProgressUpdate () futnak a UI téma
  • A visszaadott érték doInBackground (). küldött onPostExecute () metódus
  • Okozhat publishProgress () bármikor doInBackground () elvégzésére onProgressUpdate () a UI szál
  • Job lehet bármikor törölni minden szál

Figyelem! A másik probléma, amivel használata során esetlegesen előforduló munkaközeg újraindítása kiszámíthatatlan akció miatt módosult a konfiguráció a végrehajtási módban. (Például ha a felhasználó megváltoztatja a tájékozódás a képernyőn), amely képes elpusztítani a munkafolyamatot. Hogy hogyan lehet menteni a munkát, az egyik ilyen újraindul, és hogyan lehet törölni egy munkát a megsemmisítés akció, tanulmányozza a forráskód példák polcok alkalmazásokat.

Menet-Safe mód

Bizonyos helyzetekben végrehajtott módszerek is lehet nevezni a különböző szálak, és így kell írni a visszatartó menettel.

Ez elsősorban utal, hogy a módszereket lehet hivatkozni távolról, például az eljárások a kapcsolódó szolgáltatások. Ha az eljárás hívás végre IBinder osztályban. származó ugyanaz a folyamat, amely végre IBinder. módszer végre a szál hívó. Ugyanakkor, ha egy hívás érkezik egy másik folyamat, az eljárást úgy végezzük egy patak választott a medence szálak, amely támogatja a rendszer ugyanaz a folyamat, mint IBinder (ez nem kerül végrehajtásra az áramlási folyamat felhasználói felület). Például, mivel a onBind () módszer lesz az úgynevezett szolgáltatási áramlás a felhasználói felület szolgáltatási folyamat, módszerek végrehajtani az objektum, amely visszaadja onBind () (például, egy alosztálya, amely megvalósítja RPC módszerek) lesz az úgynevezett a szálak a medencében. Mivel a szolgáltatás lehet több ügyfél, több szálat a medence egyszerre ugyanazt a módszert használja IBinder. Ezért IBinder módszereket kell alkalmazni, a visszatartó menettel.

Hasonlóképpen, a tartalomszolgáltató kaphat adatokra vonatkozó kérelmek származnak másik folyamat. Bár ContentResolver ContentProvider osztályok és elrejteni szintű kezelésével kölcsönhatás folyamatokban ContentProvider módszereket. hogy válaszoljon ezekre a kérdésekre, -methods query (). insert (). delete (). update () és getType () -vyzyvayutsya menet medence a tartalom szolgáltató, nem pedig UI folyamatábra. Mivel ezek a módszerek is lehet hivatkozni bármilyen számú folyam egyidejűleg, akkor is meg kell végrehajtani megtartása menettel.

folyamat interakció

Elvégzésére IPC kérelmet kellene kötni, a szolgáltatás révén bindService () metódust. További információkért lásd a szolgáltatás a fejlesztők számára.

Kövesse @AndroidDev a Twitteren

Kövesse Android-fejlesztők a Google + -on

Nézze meg Android-fejlesztők a YouTube-on

Ez az osztály megköveteli API vagy annál magasabb szinten

Ez doc rejtett, mert a kiválasztott API szinten a dokumentáció. Meg lehet változtatni a dokumentáció API szinten a választó felett a bal oldali navigációs.

További információ a meghatározó az API szint az alkalmazás megköveteli, olvassa támogatása Különböző Platform változatok.




Kapcsolódó cikkek