Google zavrhuje Android AsyncTask API v Androide 11

Android API pre asynchrónnu logiku, AsyncTask, je na ceste von. Podľa záväzku AOSP bude API v systéme Android 11 zastarané.

Už roky je AsyncTask pre Android základným nástrojom pre začiatočníkov aj skúsených vývojárov. Ak ste si niekedy na Googli našli návod na akúkoľvek asynchrónnu logiku v systéme Android, je pravdepodobné, že prvých niekoľko výsledkov naznačuje použitie AsyncTask. Nie je to ani tak, že by to bola náhodná voľba. AsyncTask bol pôvodne vytvorený na zjednodušenie interakcie medzi operáciami na pozadí a používateľským rozhraním aplikácie. Chvíľu to robilo dobre. AsyncTask skutočne pomáha zjednodušiť asynchrónne úlohy. To však neznamená, že je to dokonalé.

Jedna vec, ktorú musí veľa aplikácií urobiť, je získať informácie zo vzdialeného servera. Keďže sieťové požiadavky môžu chvíľu trvať, zvyčajne je dôležité robiť ich asynchrónne, aby nespôsobili zamrznutie aplikácie. Po dokončení operácie je možné aktualizovať používateľské rozhranie. Je však možné, že v čase, keď sa dokončí sieťová požiadavka, príslušná časť používateľského rozhrania už neexistuje, čo môže spôsobiť zlyhania alebo iné chyby. Hoci AsyncTask robí celkový proces jednoduchším, nerešpektuje životný cyklus aplikácií pre Android. To znamená, že neexistuje žiadna vstavaná ochrana proti dokončeniu úlohy AsyncTask po zmene používateľského rozhrania. Samozrejme, je možné manuálne pridať kontroly a iné ochrany, ale to pridáva veľa opakujúceho sa kódu (AKA štandardný kód). Kvôli problémom, ako je tento, AsyncTask upadol na vedľajšiu koľaj. Google tiež neurobil veľa zmien v tom, ako to funguje.

Zdá sa, že Google zastáva názor, že AsyncTask nie je možné zachrániť. V nedávnom potvrdení AOSP bol AsyncTask zastaraný, pričom uviedol podobné dôvody ako tie, o ktorých som práve hovoril. Aj keď to nie je veľká zmena pre koncových používateľov, pre vývojárov to môže znamenať veľa. Ak udržiavate staršiu kódovú základňu alebo len začínate s asynchrónnymi úlohami v systéme Android, pravdepodobne budete musieť zmeniť veľa kódu. Našťastie však Google nenechal vývojárov v prachu.

Kvôli obmedzeniam AsyncTask sa postupom času objavili alternatívy, ako napríklad RxJava a Kotlinova nová (ish) knižnica Coroutines. Tieto alternatívy majú tendenciu mať oveľa väčšiu flexibilitu a funkcie ako AsyncTask, takže si získali pomerne veľkú popularitu. Google vo svojom oznámení o ukončení podpory pre AsyncTask odporúča používať Java Concurrency framework alebo Kotlin Coroutines.

Osobne som už začal používať Kotlinove korutíny a neobzrel som sa späť. Samozrejme, viem, že veľa ľudí integrovalo svoj kód pevne okolo AsyncTask, takže je to pre nich pravdepodobne aspoň mierna nepríjemnosť. Je dobré, že existuje veľa alternatív, z ktorých si môžete vybrať. Zmena kódu môže byť nepríjemná, ale tentoraz je to aspoň možné.

Ak chcete viac podrobností, môžete si pozrieť odovzdanie tu. Potvrdenie bolo dnes zlúčené a pokiaľ sa neplánuje vydanie údržby systému Android, uvidíme, že sa táto zmena prejaví v systéme Android 11 budúci rok.