Android betöltő, loadermanager
Címkék: LoaderManager. Rakodó. LoaderManager.LoaderCallbacks. AsyncTaskLoader. CursorLoader
Az Android régebbi verzióiban használták a kurzoros módszerek használatát, amelyek most már elavultnak tekintendők.
- startManagingCursor (kurzor)
- managedQuery (Uri, String, String, String, String)
Az első módszer a tevékenység életciklusában működött. A kurzor automatikusan kikapcsolt vagy lezárt állapotban volt, amikor a tevékenység leállt vagy lezárt volt. A tevékenység újraindítása után a kurzor aktiválódik, és ismételt kérést indít az adatokhoz.
A második módszer maga hajtotta végre a kérést. A módszerrel kapcsolatos probléma az volt, hogy ugyanazt a szálat dolgozták fel az alkalmazás felületén, és szükségtelen lekérdezéseket hajtottak végre, amikor a tevékenység állapota megváltozott, fékezve az egész alkalmazást, ha az adatbázis túl nagy volt.
Például az adatokat a régiben, a tartalomszolgáltatók segítségével töltjük be a listába. Az eredmény feldolgozása a SimpleCursorAdapter segítségével történik, és megjelenik.
Ezt a kódot a fenti okok miatt el kell dobni, hogy ne legyenek teljesítményproblémák.
Az Android 3.0-mal kezdődően volt egy másik mechanizmus a Loader és a LoaderManager kezelőhöz. amelyek a régebbi eszközök kompatibilitási könyvtárában is megtalálhatók.
Most minden kurzoros művelet aszinkron üzemmódban történik. Az adatokat gyorsítótárba helyezi, és szükség esetén frissíti az adatokat, ha az adatok megváltoztak.
LoaderManager
A LoaderManager lehetővé teszi a tevékenységhez vagy töredékhez tartozó rakodók megfelelő kezelését. Minden tevékenységnek és minden egyes töredéknek van egy példánya a LoaderManagernek. amely az initLoader () módszerekkel a rakodókkal működik. restartLoader (). destroyLoader (). A menedzseren keresztül végzett tevékenység figyelmeztethet a megsemmisítésére, így a LoaderManager a források megtakarításával bezárja a rakodókat.
Maga a LoaderManager nem tudja, hogyan töltik be az adatokat az alkalmazásba. Egyszerűen utasítja a betöltőt az adatterhelés és egyéb parancsok indítására, leállítására, frissítésére.
A LoaderManager Loader objektumokkal dolgozik
A Loader osztály általános. Az AsyncTaskLoader és a CursorLoader speciális meghajtású gépek is rendelkezésre állnak.
A LoaderManagerrel való munka a LoaderManager.LoaderCallbacks felület három visszahívási módján keresztül történik
Interfész LoaderManager.LoaderCallbacks
Interfész LoaderManager.LoaderCallbacks
onCreateLoader ()
Az onCreateLoader () módszer egy új betöltőt ad vissza. A LoaderManager felhívja a módszert, amikor a Loader létrejön.
A betöltőhöz való hozzáféréskor (például az initLoader () módszerrel) ellenőrzi, hogy létezik-e az azonosító által megadott betöltő. Ha nem létezik, az onCreateLoader () metódust hívja. Itt van, hogy létrehoz egy új rendszerbetöltőt.
onLoadFinished ()
Az onLoadFinished metódus automatikusan hívásra kerül, amikor a Loader befejezi az adatok betöltését. A betöltő figyeli a beérkező adatokat, és a kezelő értesítést kap a letöltés befejezéséről, és elküldi az eredményt erre a módszerre.
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.
onLoadReset ()
Az onLoadReset () módszer újratölti az adatokat a betöltőben.
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.
A rakodókezelő sorrendje a tevékenység létrehozása során.
Application.onCreate ()
Activity.onCreate ()
LoaderManager.LoaderCallbacks.onCreateLoader ()
Activity.onStart ()
Activity.onResume ()
LoaderManager.LoaderCallbacks.onLoadFinished ()
A konfiguráció megváltoztatásakor (forgatás stb.):
Alkalmazás: a konfiguráció megváltozott
Activity.onCreate
Activity.onStart
[Nincs hívás az onCreateLoader-re]
LoaderManager.LoaderCallbacks.onLoadFinished
[opciók keresési nézetben tartalmaz szöveget]
SearchView.onQueryChangeText (Szöveg szerinti keresés, lásd az alábbi példákat)
RestartLoader
LoaderManager.LoaderCallbacks.onCreateLoader
LoaderManager.LoaderCallbacks.onLoadFinished
Amikor a tevékenység megsemmisül:
Activity.onStop ()
Activity.onDestroy ()
LoaderManager.LoaderCallbacks.onLoaderReset () // Megjegyezzük, hogy ez a módszer neve
Loader (Loader)
A rakodókezelő kezeli a rakodókat. A betöltőt úgy tervezték, hogy adatokat töltsön be egy forrásból: lemez, adatbázis, tartalomszolgáltató, hálózat vagy más folyamat. A betöltő a fonalat külön menetben blokkolja, és az eredményeket az érdeklődő oldalra visszük, az adatok változásait figyelemmel kísérik, és a vezetővel tájékoztatják az összes fontos változást a speciális hallgatókon keresztül.
Tehát az aktivitás vagy töredék nem érdekli az adatok betöltésének módját. Ezt a munkát a betöltőnek bízta.
Három beépített betöltő típus létezik: Loader. Az AsyncTaskLoader és a CursorLoader. Loader - alap osztály, ami önmagában nem nagyon hasznos. Meghatározza az API-t, amelyet a LoaderManager az összes rakodóhoz való kapcsolódásra használ.
AsyncTaskLoader
Az aszinkron adattovábbítás feladatait külön szálon, egy olyan osztályt, amely az AsyncTaskLoader-t örököli
A hallgatók információkat kapnak a betöltőről. Ehhez a kezelő regisztrálja az OnLoadCompleteListener listát
Ahhoz, hogy a rendszerindító betöltő működjön, el kell indítani. Az indított betöltő figyeli az adatokat mindaddig, amíg újraindul vagy leáll.
A leállított betöltő továbbra is figyelemmel kíséri az adatokban bekövetkezett változásokat, de nem jelenti azokat. Szükség esetén újraindíthatja vagy újraindíthatja az indított betöltõprogramot.
Újraindításkor a betöltőnek nem szabad új adatletöltést indítani, és nem figyelnie a változtatásokat. Feladata a felesleges adatok felszabadítása. Ezt az állapotot ritkán használják, de bizonyos esetekben erre szükség van.
Az Ön feladata, hogy létrehozza a saját boot-betöltőjét, végrehajtsa a loadInBackground () metódust, és felülírja az onStartLoading () metódusokat. onStopLoading (). onReset (). onCanceled (). deliverResult (D eredmények).
Kis példa a demonstrációra. Egy példa innen.
Hozzon létre egy gombot és egy szöveges címkét a képernyőn.
Hozzunk létre egy betöltő osztályt, amely örökli az AsyncTaskLoader-t. A betöltőnk visszaadja a karakterláncot, szóval mondjuk
Az mWord változó tárolja az alapzsinórt, amely alapján véletlenszerű karakterláncot hoznak létre. Ez a paraméter akkor kerül átadásra, ha a betöltő a konstruktorban van létrehozva a Bundle objektum használatával. Az állandó RANDOM_STRING_LENGTH megadja az új véletlenszerű karakterlánc maximális hosszát.
Az AsyncTaskLoader örökölte. számos módszert újradefiniálunk:
- A loadInBackground () az a módszer, amelyben maga az összes adattöltési munka létrejön
- onStartLoading () - a boot betöltő indításakor aktiválódik (de ez nem jelenti azt, hogy az adatok betöltődnek)
- onStopLoading () - a rendszertöltő letiltása után aktiválódik
- deliverResult () - megkapja és visszaadja a betöltő végeredményét
- forceLoad () - "kényszerített" új adatok betöltése
Az adatok beolvasása a loadInBackground () metódusba, a kiegészítő generateString () metódusnak hívjuk. amely véletlenszerű karakterláncot generál.
A tevékenységi osztály végrehajtja a LoaderManager.LoaderCallbacks interfészt a módszerekkel, amelyek lehetővé teszik számunkra, hogy "részt vegyenek" a betöltő életciklusában és kölcsönhatásba lépjenek a LoaderManagerrel.
Az onCreateLoader () metódus a bootloader indításakor kerül meghívásra. Ha az ilyen azonosítóval rendelkező betöltő már létrehozásra került, a módszert nem hívják meg. Belülünk, meghatározzuk, melyik azonosítót adtuk meg a szükséges betöltő létrehozásához. Ha a betöltő csak egy, akkor az állapot eltávolítható.
Az onLoadFinished () metódus a letöltés befejezésekor szól. A módszer a letöltött adatokat, valamint a betöltő objektumot kapja. A kapott karakterláncot szöveges címkén adjuk ki.
Az onLoaderReset () módszer a boot betöltő nullázásakor hívásra kerül. Itt az adatok nullázásra kerülnek, és minden hivatkozást törölni kell rájuk.
A gombkattintás az új adatletöltés indításakor a trigger. Az onContentChanged () metódust használjuk. A betöltő jelzése az adatok megváltoztatásával kapcsolatban.
Hogyan történik az első indító betöltő? Ezt az onCreate () módszerrel tesszük. a betöltő inicializálása. Az inicializálás során átadjuk a bootloader azonosítót a paraméterek között, a Bundle az átvitt argumentumokat tartalmazó objektum (átadjuk az alaphangot) és egy mutatót a visszahívó objektumnak (esetünkben ez a tevékenység maga).
Nos, futtassa az alkalmazást, és nézze meg a naplókat. Ha rákattint a gombra, a szöveg frissül, de a naplókban már nem látjuk a bootloader újra létrehozását.
CursorLoader
A CursorLoader osztály a Loader osztály utódja, és kurzorokkal dolgozik aszinkron üzemmódban. A CursorLoader kiterjeszti az AsyncTaskLoader alkalmazást, hogy betöltse a Kurzort a ContentProvider-ről a ContentResolver segítségével.