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 を必要としています。

続きを読む >>


GitHub から AndroidStudio にプロジェクトインポートする手順

 

GitHubアカウントは使わず、forkとかなし。
facebook-android-sdk のサンプルを稼働させるまで。

facebook_facebook-android-sdk

facebook/facebook-android-sdk

 

手順

1. ソースを取得、展開
2. local.properties の作成
3. settings.gradle の作成
4. build.gradle の作成
5. プロジェクトインポート
6. できあがり

順番にやっていく。

続きを読む >>


Android Support Library のよくあるクラッシュ その1「安全な Fragment Transaction の実行」

 

フラグメントのトランザクションはアクティビティ内で、それの追加、削除、入れ替えで利用されます。
大抵、フラグメントのトランザクションは、アクティビティの onCreate()メソッドか、ユーザ処理に反応して実行されます。

 

しかし、アクティビティが再開されるとき、フラグメントのトランザクションがコミットされている場合があります。

次のようなクラッシュです。

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord)
at android.support.v4.app.DialogFragment.show(DialogFragment)

 

フラグメントアクティビティがバックグラウンドに置かれたときは、FragmentManagerImpl の mStateSaved フラグが trueに設定されます。

このフラグは状態(state)の損失があるかどうかを確認するために利用されます。

トランザクションをコミットしようとしたときにこのフラグがtrueの場合、上記のように IllegalStateException がスローされます。

状態の損失を防ぐための onSavedInstanceState() が呼ばれた後に、フラグメントトランザクションはコミットすることができません。

このクラッシュが発生する理由のうち、状態(state)がリストアされるときにフラグが false に戻ってないときに onResume() が呼ばれていることがあります。

このようなクラッシュを防止するには、アクティビティのonResume() 内での フラグメントトランザクションのコミット避けるとよいです。

その代わりに、onResumeFragment() を使いましょう。これが適切な状態でフラグメントと対話するための推奨されるアプローチです。

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