Bootloader, android fejlesztők

Főbb osztályok

Kódminták a témában

Az Android 3.0-ban megjelenő töltők egyszerűsítik az adatok aszinkron betöltését egy műveletbe vagy töredékbe. A rakodók a következő tulajdonságokkal rendelkeznek:

  • Ezek elérhetőek bármely tevékenység műveletekhez és töredékrészekhez.
  • Aszinkron adattöltést biztosítanak.
  • Az adatok forrását nyomon követik és új eredményeket produkálnak a tartalom megváltozásakor.
  • A konfigurációs változások után újra létrehozásra kerülnek az utolsó bootloader kurzorhoz. Így nem kell ismételten kérnie adataikat.

Boot Loader API Összefoglaló

Számos osztály és interfész található, amelyeket az alkalmazásban a rakodók használhatnak. Ezek a táblázatban vannak felsorolva:

Abban az absztrakt osztályban, amely tevékenységhez vagy töredékhez kapcsolódik egy vagy több Loader-felület kezeléséhez. Ez lehetővé teszi, hogy az alkalmazás hosszú távú műveleteket kezeljen a tevékenység vagy a töredék életciklusa mellett; leggyakrabban ezt az osztályt használja a CursorLoader. Az alkalmazások azonban saját rakodógépekkel írhatnak más típusú adatokkal való együttműködést.

Műveletenként vagy töredékenként csak egy LoaderManager osztály létezik. A LoaderManager osztály azonban több rakodót is tartalmazhat.

Visszahívási felület, amely lehetővé teszi az ügyfél számára, hogy kölcsönhatásba lépjen a LoaderManagerrel. Például az onCreateLoader () visszahívási módszer használatával létrehoz egy új betöltőt.

Az aszinkron adatbetöltést végző elvont osztály. Ez a betöltő alapkategóriája. A CursorLoader-t általában használják. De elvégezheti saját alosztályát. Ha a rakodógépek aktívak, nyomon kell követniük az adatforrást, és új eredményeket kell elérniük, amikor a tartalom megváltozik.

Az absztrakt boot-betöltő, amelyet az AsyncTask nyújt a munka elvégzéséhez.

Az AsyncTaskLoader osztály alosztálya. amely kéri a ContentResolver-et és visszaad egy kurzort. Ez az osztály a Loader protokollt szabványos módon hajtja végre a kurzor lekérdezéséhez. Az AsyncTaskLoaderre épül, hogy a lekérdezést a háttérszálon lévő kurzorra futtassa, hogy ne blokkolja az alkalmazás felhasználói felületét. A bootloader használata a legjobb módja annak, hogy aszinkron módon töltsék le az adatokat a ContentProvider-ből a kezelt lekérdezés végrehajtása helyett, a művelet platformján vagy API-ján keresztül.

Az ebben a táblázatban bemutatott osztályok és interfészek a legfontosabb összetevők, amelyekkel a betöltő megvalósul az alkalmazásban. Amikor létrehoz minden rendszertöltőt, akkor nem kell mindegyik összetevőt használni, de mindig hozzon létre egy linket a LoaderManager-hez, hogy inicializálja a betöltőt, és használja a Loader osztály végrehajtását. például a CursorLoader. A következő szakaszok leírják, hogyan kell ezeket az osztályokat és interfészeket használni az alkalmazásban.

Rakodók használata az alkalmazásban

Ez a rész leírja, hogyan használhatod a letöltőket az Android-alkalmazásban. A rakodógépet használó alkalmazások általában a következő elemeket tartalmazzák:

A Boot Loader indítása

A LoaderManager egy vagy több Loader példányt felügyel a tevékenységben vagy a töredékben. Egy műveletenként vagy egy töredékenként csak egy LoaderManager van.

A betöltőt általában a művelet onCreate () metódusában vagy a fragment onActivityCreated () metódusában inicializálják. Ez a következőképpen történik:

Method) "> initLoader () a következő paramétereket veszi figyelembe:

  • A betöltő egyedi azonosítója. Ebben a példában az azonosító 0;
  • opcionális érvek, amelyeket az építés során átadnak a betöltőnek (ebben a példában nulla);
  • a LoaderManager.LoaderCallbacks végrehajtása. amely a LoaderManager osztályt bootloader események megadására hívja fel. Ebben a példában a helyi osztály végrehajtja a LoaderManager.LoaderCallbacks felületet. így átmegy a saját magára: ez.

Hívás) "> Az initLoader () inicializálja a bootloadert. Két dolgot tehet meg:

  • Ha az azonosítóval megadott betöltõ már létezik, az utoljára létrehozott betöltõt újra használni fogják.
  • Ha a rakodó által megadott azonosító nem létezik,) „> initLoader () módszer hatására LoaderManager.LoaderCallbacks a onCreateLoader (.) Ez itt végrehajtott kód példányosíthat és visszatér egy új boot loader. További információkért lásd. In onCreateLoader listájában.

Mindenesetre a LoaderManager.LoaderCallbacks végrehajtása a betöltővel társul, és a betöltő állapota megváltozik. Ha a hívás idején a hívó összetevő készenléti állapotban van, ez azt jelenti, hogy a kért betöltő már létezik, és az adatokat generálja. Ebben az esetben a rendszer azonnal hívja, D) "> onLoadFinished () (az időben)"> initLoader ()), készüljön fel erre. A visszahívásról további információt a onLoadFinished oldalon talál.

Megjegyezzük, hogy a módszer) „> initLoader () függvény által generált osztálybetöltése. De a rekord osztály LoaderManager utalás van szükség. Kezeli az élet rakodó ciklus automatikusan. Osztály LoaderManager elkezdi letölteni, és befejezi, ha szükséges, és támogatja a rakodó és a hozzá kapcsolódó Ezek tartalmát. ez azt jelenti, hogy csak ritkán lépnek közvetlen kapcsolatba a loader (bár egy példa segítségével a rakodó módszerek finomhangolását annak viselkedését, lásd. LoaderThrottle a mintában kód). a beavatkozások Process letölteni LoaderManager.LoaderCallbacks módszerekkel. További információt a gyakran használt bizonyos események bekövetkezésekor ezt a kérdést,. Segítségével visszahívások LoaderManager.

A Boot Loader újraindítása

. Az eljárást alkalmazva) „> initLoader () a fent látható, akkor használja a meglévő boot loader a megadott azonosító -. Ha bármely boot loader Ha nem, akkor egy olyan módszer, néha azonban a régi adatokat meg kell semmisíteni, és az újrakezdés ..

Törölje a régi adatokat használt módszer) „> restartLoader () Például ez a végrehajtási eljárás SearchView.OnQueryTextListener újraindul rakodó, ha megváltoztatja a felhasználói lekérdezés Loader újra kell indítani, hogy tudta használni a módosított keresési szűrőt, hogy végre egy új lekérdezést ..:

A LoaderManager osztály visszahívása

A LoaderManager.LoaderCallbacks egy visszahívási felület, amely lehetővé teszi az ügyfél számára, hogy kölcsönhatásba lépjen a LoaderManager osztályával.

Várható, hogy a rakodók, különösen a CursorLoader. menteni fogják az adataikat, miután leálltak. Ez lehetővé teszi az alkalmazások számára az adatoknak az operáció vagy töredék onStop () és onStart () metódusainak mentését, így amikor a felhasználó visszatér az alkalmazáshoz, nem kell várnia az adatok újratöltéséig. A LoaderManager.LoaderCallbacks módszerek segítségével megtudhatja, mikor kell létrehozni egy új rendszerbetöltőt, és meg kell adni az alkalmazást, amikor el kell hagyni a bootloader adatok használatát.

A LoaderManager.LoaderCallbacks felület a következő módszereket használja:

  • onCreateLoader () - létrehoz egy példányt, és új Loader osztályt ad vissza ehhez az azonosítóhoz.
  • , D) "> onLoadFinished () - akkor hívják, ha a korábban létrehozott betöltő befejezte a betöltést.
  • ) "> onLoaderReset () - akkor hívják, ha az előzőleg létrehozott betöltő állapota újraindul, ami elveszti adatait.

Ezeket a módszereket az alábbiakban részletesebben ismertetjük.

onCreateLoader

Amikor megpróbálja elérni a boot betöltő (például a módszer) „> initLoader ()) ellenőrzi, hogy a rakodó által meghatározott azonosítója. Ha ez nem létezik, ez okozza LoaderManager.LoaderCallbacks onCreateLoader () metódust. Ez az, ahol egy új bootloader. Általában ez lesz CursorLoader osztályban. azonban, akkor végre a saját osztályát és alosztályát Loader.

Ebben a példában az onCreateLoader () visszahívási módszer CursorLoader osztályt hoz létre. Meg kell építeni a CursorLoader osztályt a konstruktor módszerével, amely teljes körű információra van szüksége, amely a kérésnek a ContentProviderhez történő végrehajtásához szükséges. Különösen szükséges:

  • uri - a megszerzett tartalom URI-ja;
  • vetítés - a visszaküldendő oszlopok listája. Ha átadja a nulla értéket, akkor minden oszlop vissza fog térni, és ez nem hatékony;
  • A kiválasztás olyan szűrő, amely kijelöli, hogy melyik sorok lesznek visszaadva, formázva, mint egy SQL WHERE záradék (kivéve a WHERE záradékot). Null átadásakor az adott URI összes sorát visszaadják;
  • selectionArgs - A "?" karaktereket a kiválasztásban is felveheti, melyet a kiválasztás sorrendjében a selectionArgs értékkel helyettesít. Az értékek stringként lesznek kötve;
  • sortOrder a sorok sorrendje, SQL ORDER BY záradékként formázva (kivéve az ORDER BY parancsot). Ha átadja a nulla értéket, akkor a standard rendezési sorrend kerül felhasználásra, így a lista nem rendezhető.

onLoadFinished

Ezt a módszert akkor hívják, ha a korábban létrehozott betöltő befejezte a betöltést. Ezt a módszert garantáltan hívják, mielőtt a jelen betöltőhöz megadott utolsó adatok felszabadulnának. Ez idő alatt meg kell szüntetni a régi adatok (hamarosan cserélni) használatát. Ezt azonban nem szabad megtennie, mert az adatok a betöltő tulajdonában vannak, és ő gondoskodik róla.

A betöltő felszabadítja az adatokat, amint kiderül, hogy az alkalmazás már nem használja. Például, ha az adatok egy kurzor a CursorLoader. ne hívja közel () magát. Ha a kurzor a kurzoradapterbe kerül. Használja a swapCursor () metódust úgy, hogy a régi kurzor ne záródjon le. Például:

onLoaderReset

Ezt a módszert akkor hívják, ha az előzőleg létrehozott betöltő állapota újraindul, ami elveszti adatait. Ez a visszahívás lehetővé teszi, hogy tudni lehessen, mikor kell kiadni az adatokat, hogy törölje a linket rájuk.

Ez a végrehajtás a swapCursort () értéket null értékkel hívja:

Példaként a töredékrész teljes megvalósítását az alábbiakban adjuk meg. amely a ListView-ot a kérés eredményével megjeleníti a tartalomszolgáltatóval, például a kapcsolattartókkal. A lekérdezés kezelése az eladóhoz használja a CursorLoader osztályt.

Annak érdekében, hogy egy alkalmazás hozzáférhessen a felhasználói kapcsolatokhoz, ahogyan ez a példa látható, annak manifesztjének rendelkeznie kell READ_CONTACTS engedélyével.

Más példák

Az ApiDemos-ban számos példát mutat be a boot-töltők használata:

  • LoaderCursor - a fenti fragmentum teljes verziója.
  • A LoaderThrottle egy példa arra, hogy miként használhatja a szabályozást a tartalomszolgáltató által az adatok megváltoztatásakor végrehajtott kérések számának csökkentése érdekében.

Az SDK-kódminták letöltésével és telepítésével kapcsolatban lásd: A kódminták beszerzése.

Kövesse @AndroidDev a Twitteren

Kövesse Android Developers a Google + -on

Tekintse meg az Android fejlesztőket a YouTube-on

Ez az osztály API szintet vagy magasabbat igényel

Ezt a dokumentumot a kiválasztott elem választotta ki. A dokumentációs API-szintet a bal oldali navigáció feletti választógombbal módosíthatja.

Ha többet szeretne tudni az API-szint megadásáról, olvassa el a Különböző platformversenyek támogatását.

Kapcsolódó cikkek