Android でこの単純な頻繁に発生する状況について質問があります。
main activity があり、AsyncTask が MainActivity のビューを更新できるように、mainactivity の参照とともに AsyncTask を呼び出します。
イベントをステップに分解します
- MainActivity は AyncTask を作成し、その参照をそれに渡します。
- AysncTask 、作業を開始し、たとえば 10 個のファイルをダウンロードします
- ユーザーがデバイスの向きを変更しました。これにより、AsyncTask で孤立したポインターが発生します。
- AsyncTask が完了し、ステータスを更新するためにアクティビティにアクセスしようとすると、null ポインタが原因でクラッシュします。
上記の解決策は、本「Pro Android 4」で推奨されているように、AsyncTask に WeakReference を保持することです。
WeakReference<Activity> weakActivity;
in method onPostExecute
Activity activity = weakActivity.get();
if (activity != null) {
// do your stuff with activity here
}
これはどのように状況を解決しますか?
私の質問は、私の asynctask が 10 個のファイルをダウンロードしていて、5 個の完了時に (方向の変更により) アクティビティが再開された場合、FileDownloadingTask がもう一度呼び出されるのでしょうか?
最初に呼び出された前の AsyncTask はどうなりますか?
ありがとうございます。質問が長くなってしまい申し訳ありません。