Google opušča Androidov API AsyncTask v sistemu Android 11

Android API za asinhrono logiko, AsyncTask, je na poti. V skladu z zavezo AOSP bo API v sistemu Android 11 opuščen.

Androidov AsyncTask je že leta osnovno orodje za začetnike in izkušene razvijalce. Če ste kdaj v Googlu iskali vadnico za kakršno koli asinhrono logiko v Androidu, obstaja verjetnost, da prvih nekaj rezultatov predlaga uporabo AsyncTask. Tudi to ni naključna izbira. AsyncTask je bil prvotno ustvarjen za poenostavitev interakcije med operacijami v ozadju in uporabniškim vmesnikom aplikacije. Nekaj ​​časa je to dobro delovalo. AsyncTask resnično pomaga poenostaviti asinhrona opravila. To pa ne pomeni, da je popoln.

Ena stvar, ki jo mora narediti veliko aplikacij, je pridobivanje informacij iz oddaljenega strežnika. Ker lahko omrežne zahteve trajajo nekaj časa, je običajno pomembno, da jih izvedete asinhrono, da ne povzročijo zamrznitve aplikacije. Ko je operacija končana, lahko uporabniški vmesnik posodobite. Vendar pa je možno, da do trenutka, ko je omrežna zahteva končana, ustrezni del uporabniškega vmesnika ne obstaja več, kar lahko povzroči zrušitve ali druge napake. Medtem ko AsyncTask poenostavi celoten postopek, ne upošteva življenjskega cikla aplikacije Android. To pomeni, da ni vgrajene zaščite pred dokončanjem AsyncTask po spremembi uporabniškega vmesnika. Seveda je možno ročno dodati preverjanja in druge zaščite, vendar to doda veliko ponavljajoče se kode (AKA predloga). Zaradi takšnih težav je AsyncTask nekako padel na stran. Google prav tako ni veliko spremenil svojega delovanja.

No, zdi se, da je Googlovo mnenje, da AsyncTask ni varčen. V nedavni objavi AOSP je bil AsyncTask opuščen, pri čemer so bili navedeni podobni razlogi kot tisti, o katerih sem pravkar govoril. Čeprav to v resnici ni velika sprememba za končne uporabnike, lahko veliko pomeni za razvijalce. Če vzdržujete starejšo zbirko kod ali šele začenjate z asinhronimi opravili v Androidu, boste verjetno morali spremeniti kup kode. Na srečo pa Google razvijalcev ni pustil v prahu.

Zaradi omejitev AsyncTask so se sčasoma pojavile alternative, kot sta RxJava in Kotlinova nova (ish) knjižnica Coroutines. Te alternative imajo veliko večjo prilagodljivost in funkcije kot AsyncTask, zato so pridobile kar nekaj priljubljenosti. Google v svojem obvestilu o zastaranju za AsyncTask priporoča uporabo ogrodja Java Concurrency ali Kotlin Coroutines.

Osebno sem že začel uporabljati Kotlinove korutine in se nisem ozrl nazaj. Seveda vem, da je veliko ljudi svojo kodo tesno integriralo okoli AsyncTask, zato je to zanje verjetno vsaj majhna neprijetnost. Dobro je, da je na izbiro veliko alternativ. Spreminjanje kode je morda nadležno, vendar je tokrat vsaj mogoče.

Če želite več podrobnosti, si lahko ogledate objavo tukaj Obveza je bila združena danes in razen če je v pripravi vzdrževalna izdaja za Android, bomo to spremembo videli v Androidu 11 naslednje leto.