Android Support Library のよくあるクラッシュ その2「AsyncTasks と Configuration 変更」

 

AsyncTasksは、バックグラウンド処理を実行し、必要に応じて終了後のUIを更新することに使用されます。
AsyncTasksを使用し、コンフィギュレーションの変更を扱うことはよくあるバグとなることがあります。

Fragment は AsyncTask の実行中にその Activity から切り離され、その Activity にアクセスしようとする場合は、アプリケーションは次のようなコールスタックでクラッシュします。

java.lang.IllegalStateException: Fragment MyFragment not attached to Activity
 at android.support.v4.app.Fragment.getResources(Fragment.java:551)
 at android.support.v4.app.Fragment.getString(Fragment.java:573)

Fragment は、アプリケーションのリソースにアクセスするために Activity を必要としています。

クラッシュを防止するための一つの方法は、コンフィギュレーション変更を越えて AsyncTask を保持することです。

RetainedFragment を利用することで、AsyncTask 実行と、その処理のステータスをリスナーに通知することができます。

詳細については、FragmentRetainInstance.javaサンプルを参照するとよいです。

FragmentRetainInstance.java - platform/development - Git at Google


関連ワード:  AndroidAndroidStudioGoogleGradle今さら聞けない評判開発