Google katkestab Androidi AsyncTask API toe operatsioonisüsteemis Android 11

Asünkroonse loogika Android API AsyncTask on väljasõidul. AOSP kohustuse kohaselt katkestatakse API tugi Android 11-s.

Juba aastaid on Androidi AsyncTask olnud põhitööriist nii algajatele kui ka kogenud arendajatele. Kui olete kunagi Google'is kasutanud Androidi mis tahes asünkroonse loogika õpetust, on tõenäoline, et esimesed tulemused viitavad AsyncTaski kasutamisele. See pole ka juhuslik valik. AsyncTask loodi algselt taustatoimingute ja rakenduse kasutajaliidese vahelise suhtluse lihtsustamiseks. Mõnda aega tegi see seda hästi. AsyncTask aitab tõesti asünkroonseid ülesandeid lihtsustada. See aga ei tähenda, et see oleks täiuslik.

Üks asi, mida paljud rakendused peavad tegema, on kaugserverist teabe hankimine. Kuna võrgupäringute esitamine võib veidi aega võtta, on tavaliselt oluline neid teha asünkroonselt, et need ei põhjustaks rakenduse hangumist. Kui toiming on lõpetatud, saab kasutajaliidest värskendada. Siiski on võimalik, et selleks ajaks, kui võrgutaotlus on lõpule viidud, pole kasutajaliidese asjakohast osa enam olemas, mis võib põhjustada kokkujooksmisi või muid vigu. Kuigi AsyncTask muudab üldise protsessi lihtsamaks, ei austa see Androidi rakenduse elutsüklit. See tähendab, et pärast kasutajaliidese muutmist pole sisseehitatud kaitset AsyncTaski lõpetamise eest. Muidugi on võimalik käsitsi lisada tšekke ja muid kaitsevahendeid, kuid see lisab palju korduskoodi (AKA katlaplaat). Selliste probleemide tõttu on AsyncTask justkui kõrvale jäänud. Google pole ka selle toimimises palju muudatusi teinud.

Noh, tundub, et Google'i arvamus on, et AsyncTask on väljaspool salvestamist. Hiljutises AOSP-kohustuses tühistati AsyncTask, viidates samadele põhjustele, millest ma just rääkisin. Kuigi see ei ole lõppkasutajate jaoks tegelikult suur muutus, võib see arendajatele palju tähendada. Kui kasutate vanemat koodibaasi või alles alustate asünkroonsete ülesannetega Androidis, peate tõenäoliselt muutma hulga koodi. Õnneks pole Google aga arendajaid tolmu alla jätnud.

AsyncTaski piirangute tõttu on aja jooksul tekkinud alternatiive, nagu RxJava ja Kotlini uus (ish) Coroutinesi teek. Nendel alternatiividel on tavaliselt palju rohkem paindlikkust ja funktsioone kui AsyncTaskil, seega on nad saavutanud üsna suure populaarsuse. AsyncTaski aegumise teatises soovitab Google kasutada Java Concurrency raamistikku või Kotlin Coroutines.

Isiklikult olen juba hakanud Kotlini korutine kasutama ja pole tagasi vaadanud. Muidugi ma tean, et paljud inimesed on oma koodi tihedalt AsyncTaski ümber integreerinud, nii et see on neile tõenäoliselt vähemalt väike ebamugavus. On hea, et valida on palju alternatiive. Koodi muutmine võib olla tüütu, kuid vähemalt seekord on see võimalik.

Kui soovite rohkem üksikasju, võite tutvuda kohustusega siin. Kohustus liideti täna varem ja kui just Androidi hooldusväljalaset pole plaanis, kajastub see muudatus järgmisel aastal ka Android 11-s.