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.