L'API Android pour la logique asynchrone, AsyncTask, est en voie de disparition. Selon un engagement AOSP, l'API sera obsolète dans Android 11.
Depuis des années maintenant, AsyncTask d'Android est un outil de base pour les développeurs débutants et experts. Si vous avez déjà recherché sur Google un didacticiel sur toute sorte de logique asynchrone dans Android, il est probable que les premiers résultats suggèrent d'utiliser AsyncTask. Ce n’est pas non plus comme si c’était un choix aléatoire. AsyncTask a été créé à l'origine pour simplifier l'interaction entre les opérations en arrière-plan et l'interface utilisateur d'une application. Pendant un moment, ça a bien fonctionné. AsyncTask aide vraiment à simplifier les tâches asynchrones. Cela ne veut pas dire pour autant que c’est parfait.
Une chose que de nombreuses applications doivent faire est de récupérer des informations sur un serveur distant. Étant donné que les requêtes réseau peuvent prendre un certain temps, il est généralement important de les effectuer de manière asynchrone afin qu'elles ne provoquent pas le blocage de l'application. Une fois l'opération terminée, l'interface utilisateur peut être mise à jour. Cependant, il est possible qu'au moment où la requête réseau est terminée, la partie concernée de l'interface utilisateur n'existe plus, ce qui peut provoquer des plantages ou d'autres bugs. Bien qu'AsyncTask simplifie le processus global, il ne respecte pas le cycle de vie des applications Android. Cela signifie qu'il n'y a pas de protection intégrée contre la fin d'une AsyncTask après une modification de l'interface utilisateur. Bien sûr, il est possible d'ajouter manuellement des contrôles et d'autres protections, mais cela ajoute beaucoup de code répété (AKA passe-partout). En raison de problèmes comme celui-ci, AsyncTask a en quelque sorte été abandonné. Google n'a pas non plus apporté beaucoup de changements à son fonctionnement.
Eh bien, il semble que l'opinion de Google soit qu'AsyncTask est au-delà de la sauvegarde. Dans un récent commit AOSP, AsyncTask était obsolète, citant des raisons similaires à celles dont je viens de parler. Bien que ce ne soit pas vraiment un changement majeur pour les utilisateurs finaux, cela peut avoir une grande signification pour les développeurs. Si vous conservez une ancienne base de code ou si vous débutez avec des tâches asynchrones sous Android, vous devrez probablement modifier un certain nombre de codes. Heureusement, Google n’a pas laissé les développeurs dans la poussière.
En raison des limitations d'AsyncTask, des alternatives ont vu le jour au fil du temps, telles que la nouvelle (ish) bibliothèque Coroutines de RxJava et Kotlin. Ces alternatives ont tendance à avoir beaucoup plus de flexibilité et de fonctionnalités qu'AsyncTask, elles ont donc gagné en popularité. Dans son avis de dépréciation d'AsyncTask, Google recommande d'utiliser le framework Java Concurrency ou Kotlin Coroutines.
Personnellement, j'ai déjà commencé à utiliser les Coroutines de Kotlin et je n'ai pas regardé en arrière. Bien sûr, je sais que de nombreuses personnes ont étroitement intégré leur code autour d'AsyncTask, c'est donc probablement au moins un léger inconvénient pour eux. C'est une bonne chose qu'il existe de nombreuses alternatives parmi lesquelles choisir. Cela peut être ennuyeux de changer votre code, mais au moins c'est possible cette fois.
Si vous voulez plus de détails, vous pouvez consulter le commit ici. Le commit a été fusionné plus tôt dans la journée, et à moins qu'une version de maintenance d'Android ne soit en préparation, nous verrons ce changement se refléter dans Android 11 l'année prochaine.