Google pārtrauc Android AsyncTask API darbību operētājsistēmā Android 11

Asinhronās loģikas Android API AsyncTask drīzumā tiek izvadīts. Saskaņā ar AOSP apņemšanos API tiks novecojusi operētājsistēmā Android 11.

Jau vairākus gadus Android AsyncTask ir bijis galvenais rīks gan iesācējiem, gan pieredzējušiem izstrādātājiem. Ja kādreiz esat Google meklējis pamācību par jebkāda veida asinhrono loģiku operētājsistēmā Android, iespējams, ka daži pirmie rezultāti liecina par AsyncTask izmantošanu. Arī šī nav nejauša izvēle. AsyncTask sākotnēji tika izveidots, lai vienkāršotu mijiedarbību starp fona darbībām un lietojumprogrammas lietotāja interfeisu. Kādu laiku tas to darīja labi. AsyncTask patiešām palīdz vienkāršot asinhronos uzdevumus. Tomēr tas nenozīmē, ka tas ir ideāls.

Viena lieta, kas jādara daudzām lietojumprogrammām, ir iegūt informāciju no attālā servera. Tā kā tīkla pieprasījumi var aizņemt kādu laiku, parasti ir svarīgi tos veikt asinhroni, lai tie neizraisītu lietojumprogrammas iesaldēšanu. Kad darbība ir pabeigta, lietotāja interfeisu var atjaunināt. Tomēr iespējams, ka līdz tīkla pieprasījuma pabeigšanai attiecīgā lietotāja saskarnes daļa vairs nepastāv, un tas var izraisīt avārijas vai citas kļūdas. Lai gan AsyncTask padara kopējo procesu vienkāršāku, tas neievēro Android lietojumprogrammu dzīves ciklu. Tas nozīmē, ka nav iebūvētas aizsardzības pret AsyncTask pabeigšanu pēc lietotāja interfeisa maiņas. Protams, ir iespējams manuāli pievienot čekus un citus aizsardzības līdzekļus, taču tas rada daudz atkārtota koda (AKA katlakmens). Tādu problēmu dēļ kā šī, AsyncTask ir palicis malā. Google arī nav veikusi daudzas izmaiņas tā darbībā.

Šķiet, ka Google uzskata, ka AsyncTask nav saglabājams. Nesenā AOSP saistībā AsyncTask tika novecojis, atsaucoties uz līdzīgiem iemesliem tiem, par kuriem es tikko runāju. Lai gan tiešajiem lietotājiem šīs nav lielas izmaiņas, izstrādātājiem tas var daudz nozīmēt. Ja uzturat vecāku kodu bāzi vai tikai sākat darbu ar asinhroniem uzdevumiem operētājsistēmā Android, jums, visticamāk, būs jāmaina virkne koda. Tomēr, par laimi, Google nav atstājis izstrādātājus putekļos.

AsyncTask ierobežojumu dēļ laika gaitā ir radušās alternatīvas, piemēram, RxJava un Kotlin jaunā (ish) Coroutines bibliotēka. Šīm alternatīvām parasti ir daudz lielāka elastība un iespējas nekā AsyncTask, tāpēc tās ir ieguvušas diezgan lielu popularitāti. Paziņojumā par AsyncTask novecošanu Google iesaka izmantot Java vienlaicīguma sistēmu vai Kotlin Coroutines.

Personīgi es jau esmu sācis lietot Kotlin's Coroutines un neesmu skatījies atpakaļ. Protams, es zinu, ka daudzi cilvēki ir cieši integrējuši savu kodu ap AsyncTask, tāpēc tas viņiem, iespējams, ir vismaz nelielas neērtības. Ir labi, ka ir daudz alternatīvu, no kurām izvēlēties. Var būt kaitinoši mainīt kodu, bet vismaz šoreiz tas ir iespējams.

Ja vēlaties iegūt sīkāku informāciju, varat pārbaudīt saistības šeit. Apņemšanās tika apvienota šodien, un, ja vien netiks izstrādāts Android apkopes laidiens, šīs izmaiņas tiks atspoguļotas operētājsistēmā Android 11 nākamgad.