Android API til asynkron logik, AsyncTask, er på vej ud. Ifølge en AOSP-commit vil API'en blive forældet i Android 11.
I årevis har Androids AsyncTask været et basisværktøj for både begyndere og ekspertudviklere. Hvis du nogensinde har Googlet en tutorial til enhver form for asynkron logik i Android, er chancerne for, at de første par resultater tyder på, at du bruger AsyncTask. Det er heller ikke sådan, at dette er et tilfældigt valg. AsyncTask blev oprindeligt skabt for at forenkle interaktionen mellem baggrundshandlinger og en applikations brugergrænseflade. I et stykke tid gjorde det det godt. AsyncTask hjælper virkelig med at forenkle asynkrone opgaver. Det betyder dog ikke, at den er perfekt.
En ting, som mange applikationer skal gøre, er at hente information fra en ekstern server. Da netværksanmodninger kan tage et stykke tid, er det normalt vigtigt at gøre dem asynkront, så de ikke får applikationen til at fryse. Når handlingen er fuldført, kan brugergrænsefladen opdateres. Det er dog muligt, at den relevante del af brugergrænsefladen ikke længere eksisterer, når netværksanmodningen er fuldført, hvilket kan forårsage nedbrud eller andre fejl. Mens AsyncTask gør den overordnede proces enklere, respekterer den ikke Androids applikationslivscyklus. Det betyder, at der ikke er indbygget beskyttelse mod en AsyncTask-afslutning efter en UI-ændring. Det er selvfølgelig muligt manuelt at tilføje checks og andre beskyttelser, men det tilføjer en masse gentagelseskode (AKA boilerplate). På grund af problemer som dette er AsyncTask på en måde faldet af vejen. Google har heller ikke lavet mange ændringer i, hvordan det fungerer.
Nå, det ser ud til, at Googles mening er, at AsyncTask ikke kan spares. I en nylig AOSP-commit blev AsyncTask forældet med henvisning til lignende årsager til dem, jeg lige har talt om. Selvom dette egentlig ikke er en stor ændring for slutbrugere, kan det betyde meget for udviklere. Hvis du vedligeholder en ældre kodebase, eller du lige er startet med asynkrone opgaver i Android, bliver du sandsynligvis nødt til at ændre en masse kode. Heldigvis har Google dog ikke efterladt udviklere i støvet.
På grund af AsyncTasks begrænsninger er der opstået alternativer over tid, såsom RxJava og Kotlins nye (ish) Coroutines-bibliotek. Disse alternativer har en tendens til at have meget mere fleksibilitet og funktioner end AsyncTask, så de har vundet en del popularitet. I sin meddelelse om udfasning af AsyncTask anbefaler Google at bruge Javas Concurrency framework eller Kotlin Coroutines.
Personligt er jeg allerede begyndt at bruge Kotlins Coroutines, og har ikke set mig tilbage. Selvfølgelig ved jeg, at mange mennesker har integreret deres kode tæt omkring AsyncTask, så dette er nok i det mindste en lille ulempe for dem. Det er godt, at der er masser af alternativer at vælge imellem. Det kan være irriterende at ændre din kode, men det er i det mindste muligt denne gang.
Hvis du vil have flere detaljer, kan du tjekke forpligtelsen ud her. Forpligtelsen blev slået sammen tidligere i dag, og medmindre der er en Android-vedligeholdelsesudgivelse i pipelinen, vil vi se denne ændring afspejlet i Android 11 næste år.