Android API za asinkronu logiku, AsyncTask, je na izlasku. Prema predaji AOSP-a, API će biti obustavljen u Androidu 11.
Već je godinama Androidov AsyncTask glavni alat za početnike i iskusne programere. Ako ste ikada tražili na Googleu vodič za bilo koju vrstu asinkrone logike u Androidu, velike su šanse da prvih nekoliko rezultata sugerira korištenje AsyncTask. Nije ni ovo slučajan izbor. AsyncTask je izvorno stvoren da pojednostavi interakciju između pozadinskih operacija i korisničkog sučelja aplikacije. Neko je vrijeme to dobro funkcioniralo. AsyncTask doista pomaže pojednostaviti asinkrone zadatke. No, to ne znači da je savršen.
Jedna stvar koju mnoge aplikacije trebaju učiniti je zgrabiti informacije s udaljenog poslužitelja. Budući da mrežni zahtjevi mogu potrajati, obično je važno izvršiti ih asinkrono kako ne bi uzrokovali zamrzavanje aplikacije. Nakon završetka operacije, korisničko sučelje se može ažurirati. Međutim, moguće je da do završetka mrežnog zahtjeva relevantni dio korisničkog sučelja više ne postoji, što može uzrokovati padove ili druge pogreške. Iako AsyncTask čini cijeli proces jednostavnijim, ne poštuje životni ciklus Androidove aplikacije. To znači da ne postoji ugrađena zaštita od završetka AsyncTask nakon promjene korisničkog sučelja. Naravno, moguće je ručno dodati provjere i druge zaštite, ali to dodaje puno ponavljanja koda (AKA šablon). Zbog ovakvih problema, AsyncTask je nekako pao po strani. Google također nije napravio mnogo promjena u načinu na koji funkcionira.
Pa, čini se da je Googleovo mišljenje da je AsyncTask izvan spasenja. U nedavnom predanju AOSP-a, AsyncTask je zastario, navodeći razloge slične onima o kojima sam upravo govorio. Iako ovo zapravo nije velika promjena za krajnje korisnike, može puno značiti za programere. Ako održavate stariju bazu kodova ili tek počinjete s asinkronim zadacima u Androidu, vjerojatno ćete morati promijeniti hrpu koda. Ipak, srećom, Google nije ostavio programere u prašini.
Zbog ograničenja AsyncTaska, s vremenom su se pojavile alternative, kao što su RxJava i Kotlinova nova (ish) biblioteka Coroutines. Ove alternative obično imaju mnogo veću fleksibilnost i značajke od AsyncTask, pa su stekle prilično popularnost. U svojoj obavijesti o obustavi za AsyncTask, Google preporučuje korištenje Java Concurrency frameworka ili Kotlin Coroutines.
Osobno sam već počeo koristiti Kotlinove korutine i nisam se osvrnuo. Naravno, znam da su mnogi ljudi čvrsto integrirali svoj kod oko AsyncTask, tako da im ovo vjerojatno predstavlja malu neugodnost. Dobro je što postoji mnogo alternativa za odabir. Možda će biti neugodno mijenjati svoj kod, ali ovaj put je barem moguće.
Ako želite više detalja, možete pogledati commit ovdje. Obaveza je spojena ranije danas i osim ako nije u pripremi izdanje za održavanje Androida, vidjet ćemo da se ova promjena odražava u Androidu 11 sljedeće godine.