Google beëindigt de AsyncTask API van Android in Android 11

De Android API voor asynchrone logica, AsyncTask, is onderweg. Volgens een AOSP-commit wordt de API in Android 11 verouderd.

AsyncTask van Android is al jaren een belangrijk hulpmiddel voor zowel beginnende als ervaren ontwikkelaars. Als je ooit een tutorial hebt gegoogled voor enige vorm van asynchrone logica in Android, is de kans groot dat de eerste paar resultaten suggereren dat je AsyncTask gebruikt. Het is ook niet zo dat dit een willekeurige keuze is. AsyncTask is oorspronkelijk gemaakt om de interactie tussen achtergrondbewerkingen en de gebruikersinterface van een applicatie te vereenvoudigen. Een tijdlang ging dat goed. AsyncTask helpt echt om asynchrone taken te vereenvoudigen. Dat betekent echter niet dat het perfect is.

Eén ding dat veel applicaties moeten doen, is informatie ophalen van een externe server. Omdat netwerkverzoeken enige tijd kunnen duren, is het meestal belangrijk om ze asynchroon uit te voeren, zodat de applicatie er niet door vastloopt. Zodra de bewerking is voltooid, kan de gebruikersinterface worden bijgewerkt. Het is echter mogelijk dat tegen de tijd dat het netwerkverzoek is voltooid, het relevante deel van de gebruikersinterface niet meer bestaat, wat crashes of andere bugs kan veroorzaken. Hoewel AsyncTask het algehele proces eenvoudiger maakt, respecteert het de levenscyclus van Android-applicaties niet. Dat betekent dat er geen ingebouwde bescherming is tegen het eindigen van een AsyncTask na een wijziging in de gebruikersinterface. Het is natuurlijk mogelijk om handmatig controles en andere beveiligingen toe te voegen, maar dat voegt veel herhalingscode toe (ook wel boilerplate genoemd). Vanwege dit soort problemen is AsyncTask een beetje buiten de boot gevallen. Google heeft ook niet veel wijzigingen aangebracht in de manier waarop het werkt.

Welnu, het lijkt erop dat Google van mening is dat AsyncTask niet meer te redden is. In een recente AOSP-commit werd AsyncTask verouderd, waarbij vergelijkbare redenen werden aangehaald als degene waar ik het zojuist over had. Hoewel dit niet echt een grote verandering is voor eindgebruikers, kan het veel betekenen voor ontwikkelaars. Als u een oudere codebase onderhoudt of net begint met asynchrone taken in Android, zult u waarschijnlijk een heleboel code moeten wijzigen. Gelukkig heeft Google ontwikkelaars niet in de steek gelaten.

Vanwege de beperkingen van AsyncTask zijn er in de loop van de tijd alternatieven ontstaan, zoals RxJava en de nieuwe (ish) Coroutines-bibliotheek van Kotlin. Deze alternatieven hebben doorgaans veel meer flexibiliteit en functies dan AsyncTask, dus ze hebben behoorlijk wat populariteit gewonnen. In de beëindigingskennisgeving voor AsyncTask raadt Google aan het Java Concurrency-framework of Kotlin Coroutines te gebruiken.

Persoonlijk ben ik al begonnen met het gebruik van Kotlin's Coroutines en heb ik niet meer achterom gekeken. Natuurlijk weet ik dat veel mensen hun code strak rond AsyncTask hebben geïntegreerd, dus dit is waarschijnlijk op zijn minst een klein ongemak voor hen. Het is maar goed dat er voldoende alternatieven zijn om uit te kiezen. Het kan vervelend zijn om uw code te wijzigen, maar deze keer is het in ieder geval mogelijk.

Als je meer details wilt, kun je de commit bekijken hier. De commit is eerder vandaag samengevoegd en tenzij er een Android-onderhoudsrelease in de pijplijn zit, zullen we deze verandering volgend jaar weerspiegeld zien in Android 11.