Google renunță la Android API AsyncTask în Android 11

API-ul Android pentru logica asincronă, AsyncTask, este pe cale de ieșire. Conform unui commit AOSP, API-ul va fi depreciat în Android 11.

De ani de zile, AsyncTask de la Android este un instrument de bază atât pentru dezvoltatorii începători, cât și pentru cei experți. Dacă ați căutat vreodată pe Google un tutorial pentru orice fel de logică asincronă în Android, sunt șanse ca primele rezultate să sugereze utilizarea AsyncTask. Nici aceasta nu este o alegere aleatorie. AsyncTask a fost creat inițial pentru a simplifica interacțiunea dintre operațiunile de fundal și interfața de utilizare a unei aplicații. Pentru o vreme, așa a făcut bine. AsyncTask într-adevăr ajută la simplificarea sarcinilor asincrone. Asta nu înseamnă totuși că este perfect.

Un lucru pe care trebuie să-l facă multe aplicații este să ia informații de pe un server la distanță. Deoarece solicitările de rețea pot dura ceva timp, de obicei este important să le faceți asincron, astfel încât să nu provoace înghețarea aplicației. Odată ce operațiunea este finalizată, interfața de utilizare poate fi actualizată. Cu toate acestea, este posibil ca până la finalizarea cererii de rețea, partea relevantă a interfeței de utilizare să nu mai existe, ceea ce poate provoca blocări sau alte erori. În timp ce AsyncTask simplifică procesul general, nu respectă ciclul de viață al aplicației Android. Aceasta înseamnă că nu există protecție încorporată împotriva terminării AsyncTask după o schimbare a interfeței de utilizare. Desigur, este posibil să adăugați manual verificări și alte protecții, dar asta adaugă o mulțime de coduri repetate (AKA boilerplate). Din cauza unor astfel de probleme, AsyncTask a cam căzut pe margine. De asemenea, Google nu a făcut multe modificări la modul în care funcționează.

Ei bine, se pare că opinia Google este că AsyncTask este dincolo de salvare. Într-un comit AOSP recent, AsyncTask a fost depreciat, invocând motive similare cu cele despre care tocmai am vorbit. Deși aceasta nu este cu adevărat o schimbare uriașă pentru utilizatorii finali, poate însemna foarte mult pentru dezvoltatori. Dacă mențineți o bază de cod mai veche sau abia începi cu sarcini asincrone în Android, probabil că va trebui să schimbi o grămadă de coduri. Din fericire, însă, Google nu a lăsat dezvoltatorii în praf.

Din cauza limitărilor AsyncTask, alternative au apărut de-a lungul timpului, cum ar fi RxJava și noua bibliotecă (ish) Coroutines a lui Kotlin. Aceste alternative tind să aibă mult mai multă flexibilitate și caracteristici decât AsyncTask, așa că au câștigat destul de multă popularitate. În avizul său de depreciere pentru AsyncTask, Google recomandă utilizarea cadrului Java Concurrency sau Kotlin Coroutines.

Personal, am început deja să folosesc Coroutines lui Kotlin și nu m-am uitat înapoi. Desigur, știu că mulți oameni și-au integrat codul strâns în jurul AsyncTask, așa că acesta este probabil cel puțin un mic inconvenient pentru ei. Este bine că există o mulțime de alternative din care să alegeți. Poate fi enervant să-ți schimbi codul, dar cel puțin de data aceasta este posibil.

Dacă doriți mai multe detalii, puteți verifica commit Aici. Commit-ul a fost fuzionat mai devreme astăzi și, dacă nu există o versiune de întreținere Android în curs de dezvoltare, vom vedea această schimbare reflectată în Android 11 anul viitor.