Die Android-API für asynchrone Logik, AsyncTask, ist vom Aussterben bedroht. Laut einem AOSP-Commit wird die API in Android 11 veraltet sein.
AsyncTask von Android ist seit Jahren ein unverzichtbares Tool für Anfänger und erfahrene Entwickler. Wenn Sie jemals ein Tutorial für irgendeine Art von asynchroner Logik in Android gegoogelt haben, ist die Wahrscheinlichkeit groß, dass die ersten Ergebnisse die Verwendung von AsyncTask nahelegen. Es ist auch nicht so, dass dies eine zufällige Wahl wäre. AsyncTask wurde ursprünglich entwickelt, um die Interaktion zwischen Hintergrundvorgängen und der Benutzeroberfläche einer Anwendung zu vereinfachen. Eine Zeit lang hat es das gut gemacht. AsyncTask trägt wirklich dazu bei, asynchrone Aufgaben zu vereinfachen. Das bedeutet jedoch nicht, dass es perfekt ist.
Viele Anwendungen müssen Informationen von einem Remote-Server abrufen. Da Netzwerkanfragen eine Weile dauern können, ist es normalerweise wichtig, sie asynchron auszuführen, damit die Anwendung nicht einfriert. Sobald der Vorgang abgeschlossen ist, kann die Benutzeroberfläche aktualisiert werden. Es ist jedoch möglich, dass der relevante Teil der Benutzeroberfläche nach Abschluss der Netzwerkanforderung nicht mehr vorhanden ist, was zu Abstürzen oder anderen Fehlern führen kann. Obwohl AsyncTask den Gesamtprozess vereinfacht, wird der Anwendungslebenszyklus von Android nicht berücksichtigt. Das bedeutet, dass es keinen integrierten Schutz gegen die Beendigung einer AsyncTask nach einer Änderung der Benutzeroberfläche gibt. Natürlich ist es möglich, Prüfungen und andere Schutzmaßnahmen manuell hinzuzufügen, aber das führt zu einer Menge Wiederholungscode (auch bekannt als Boilerplate). Aufgrund solcher Probleme ist AsyncTask irgendwie auf der Strecke geblieben. Google hat auch nicht viele Änderungen an der Funktionsweise vorgenommen.
Nun, anscheinend ist Google der Meinung, dass AsyncTask nicht mehr zu retten ist. In einem kürzlich durchgeführten AOSP-Commit wurde AsyncTask aus ähnlichen Gründen als veraltet erklärt, über die ich gerade gesprochen habe. Während dies für Endbenutzer keine große Änderung darstellt, kann es für Entwickler eine große Bedeutung haben. Wenn Sie eine ältere Codebasis pflegen oder gerade erst mit asynchronen Aufgaben in Android beginnen, müssen Sie wahrscheinlich eine Menge Code ändern. Glücklicherweise hat Google die Entwickler jedoch nicht im Stich gelassen.
Aufgrund der Einschränkungen von AsyncTask sind im Laufe der Zeit Alternativen entstanden, beispielsweise RxJava und Kotlins neue (ish) Coroutines-Bibliothek. Diese Alternativen bieten tendenziell viel mehr Flexibilität und Funktionen als AsyncTask und erfreuen sich daher großer Beliebtheit. In seiner Einstellungsmitteilung für AsyncTask empfiehlt Google die Verwendung des Concurrency-Frameworks von Java oder von Kotlin-Coroutinen.
Persönlich habe ich bereits mit der Verwendung von Kotlins Coroutinen begonnen und es nicht bereut. Natürlich weiß ich, dass viele Leute ihren Code eng in AsyncTask integriert haben, daher ist dies wahrscheinlich zumindest eine leichte Unannehmlichkeit für sie. Gut, dass es viele Alternativen zur Auswahl gibt. Es kann lästig sein, Ihren Code zu ändern, aber dieses Mal ist es zumindest möglich.
Wenn Sie weitere Details wünschen, können Sie sich den Commit ansehen Hier. Der Commit wurde heute früher zusammengeführt, und sofern keine Android-Wartungsversion in der Pipeline ist, wird sich diese Änderung nächstes Jahr in Android 11 widerspiegeln.