バックグラウンドで何かを実行してから UI を更新することは、Android で正しく実装するのが非常に困難です。単純に設計が悪い。典型的な例は、Web から何かをフェッチして結果を表示する AsyncTask です。これには 2 つの問題があります。
AsyncTask には Activity への参照があります (UI を更新する必要があるため)。画面の向きを変更した後、Activity を再起動します。ただし、AsyncTask はまだ古い破棄されたアクティビティを参照しているため、新しいアクティビティの UI を更新できません。
これにより、OutOfMemoryException が発生する可能性があります。多くのビットマップを含むアクティビティがあり、AsyncTask を開始するとします。BACK を押します (Activity は終了しました) が、AsyncTask はまだ実行中であり、Activity を参照しているため、ビットマップを含む Activity はまだメモリ内にあります。これを繰り返すと(アクティビティを開始して戻る)、遅かれ早かれ強制終了します。
これは解決できますが、複雑すぎます。1 つのアクティビティに 3 つの異なる AsyncTasks があり、それぞれが複数のインスタンスで同時に実行できます。これを正しく実装するのはイライラします。コードの理解とデバッグが非常に難しくなります。
ハニカムローダーはどうにかしてこれを解決できますか? また、ハニカム以前の Android バージョンでそれらを使用する方法はありますか?