L'API Android per la logica asincrona, AsyncTask, è in dismissione. Secondo un commit AOSP, l'API sarà deprecata in Android 11.
Da anni ormai, AsyncTask di Android è uno strumento fondamentale sia per gli sviluppatori principianti che per quelli esperti. Se hai mai cercato su Google un tutorial per qualsiasi tipo di logica asincrona in Android, è probabile che i primi risultati suggeriscano l'utilizzo di AsyncTask. Non è nemmeno che questa sia una scelta casuale. AsyncTask è stato originariamente creato per semplificare l'interazione tra le operazioni in background e l'interfaccia utente di un'applicazione. Per un po' ha funzionato così bene. AsyncTask aiuta davvero a semplificare le attività asincrone. Ciò non significa che sia perfetto, però.
Una cosa che molte applicazioni devono fare è acquisire informazioni da un server remoto. Poiché le richieste di rete possono richiedere del tempo, in genere è importante eseguirle in modo asincrono in modo che non causino il blocco dell'applicazione. Una volta completata l'operazione, è possibile aggiornare l'interfaccia utente. Tuttavia, è possibile che al termine della richiesta di rete, la parte rilevante dell'interfaccia utente non esista più, il che può causare arresti anomali o altri bug. Sebbene AsyncTask semplifichi il processo complessivo, non rispetta il ciclo di vita dell'applicazione Android. Ciò significa che non è disponibile alcuna protezione integrata contro il completamento di un AsyncTask dopo una modifica dell'interfaccia utente. Naturalmente, è possibile aggiungere manualmente controlli e altre protezioni, ma ciò aggiunge molto codice ripetuto (boilerplate AKA). A causa di problemi come questo, AsyncTask è caduto nel dimenticatoio. Inoltre, Google non ha apportato molte modifiche al suo funzionamento.
Bene, sembra che l'opinione di Google sia che AsyncTask sia oltre il salvataggio. In un recente commit AOSP, AsyncTask è stato deprecato, adducendo ragioni simili a quelle di cui ho appena parlato. Anche se questo non è un cambiamento enorme per gli utenti finali, può significare molto per gli sviluppatori. Se stai mantenendo una base di codice precedente o stai appena iniziando con attività asincrone in Android, probabilmente dovrai modificare un sacco di codice. Fortunatamente, però, Google non ha lasciato gli sviluppatori nella polvere.
A causa delle limitazioni di AsyncTask, nel tempo sono emerse alternative, come RxJava e la nuova (più o meno) libreria Coroutines di Kotlin. Queste alternative tendono ad avere molta più flessibilità e funzionalità rispetto ad AsyncTask, quindi hanno guadagnato un po' di popolarità. Nella sua notifica di deprecazione per AsyncTask, Google consiglia di utilizzare il framework Concurrency di Java o Kotlin Coroutines.
Personalmente, ho già iniziato a utilizzare le Coroutine di Kotlin e non ho guardato indietro. Naturalmente, so che molte persone hanno integrato il proprio codice strettamente attorno ad AsyncTask, quindi questo probabilmente è almeno un leggero inconveniente per loro. È un bene che ci siano molte alternative tra cui scegliere. Potrebbe essere fastidioso cambiare il codice, ma almeno questa volta è possibile.
Se desideri maggiori dettagli, puoi controllare il commit Qui. Il commit è stato unito oggi e, a meno che non sia in programma una versione di manutenzione di Android, vedremo questo cambiamento riflesso in Android 11 l'anno prossimo.