Etwas im Hintergrund zu tun und dann die Benutzeroberfläche zu aktualisieren, ist in Android sehr schwer korrekt zu implementieren. Es ist einfach schlecht konzipiert. Ein typisches Beispiel ist eine AsyncTask, die etwas aus dem Web abruft und das Ergebnis anzeigt. Dabei gibt es 2 Probleme:
-
Die AsyncTask hat einen Verweis auf Activity (weil sie ihre Benutzeroberfläche aktualisieren muss). Nach der Änderung der Bildschirmausrichtung wird die Activity neu gestartet. Aber die AsyncTask verweist immer noch auf die alte zerstörte Activity und kann daher die Benutzeroberfläche der neuen Activity nicht aktualisieren.
-
Dies kann zu OutOfMemoryException führen. Stellen Sie sich vor, Sie haben eine Activity mit vielen Bitmaps und starten eine AsyncTask. Sie drücken BACK (Activity ist beendet), aber die AsyncTask läuft noch und da sie auf die Activity verweist, ist die Activity mit den Bitmaps noch im Speicher. Wiederholen Sie dies (Activity starten und BACK) und Sie haben früher oder später ein Force Close.
Dieses Problem kann gelöst werden, ist aber viel zu kompliziert. In einer Activity habe ich 3 verschiedene AsyncTasks, von denen jede in mehreren Instanzen gleichzeitig laufen kann. Dies korrekt zu implementieren ist frustrierend. Der Code wird wirklich schwer zu verstehen und zu debuggen.
Dose Wabenlader das Problem irgendwie lösen? Und gibt es eine Möglichkeit, sie in Vor-Honeycomb Android-Versionen zu verwenden?