web-dev-qa-db-ja.com

onResume()とonResumeFragments()の違い

FragmentActivity.onResume() javadoc:

OnResume()をフラグメントにディスパッチします。プラットフォームの古いバージョンとの相互運用を改善するために、この呼び出しの時点では、アクティビティに添付されたフラグメントは再開されないことに注意してください。これは、場合によっては、以前の状態がまだ保存され、状態を変更するフラグメントトランザクションが許可されない可能性があることを意味します。適切な状態のフラグメントを正しく操作するには、代わりにonResumeFragments()をオーバーライドする必要があります。

FragmentActivity.onResumeFragments() javadoc:

これはonResume()のフラグメント指向バージョンであり、フラグメントが再開されるのと同じポイントでアクティビティの操作を実行するためにオーバーライドできます。必ずスーパークラスに電話してください。

上記は、プラットフォームが次のことを保証することを意味しますか?

  • フラグメントは、onResume()の実行中に決して再開されません(それらのFragmentActivity.onResume()は呼び出されません)。
  • フラグメントは、onResume()の実行中に常に再開されます(FragmentActivity.onResumeFragments()が呼び出されます)。

そうでない場合、開発者はどのようにして上記を正しく利用し、警戒することができますか?

19
nekojsi

onResume()は呼び出されますか?

はい、FragmentActivity.onResume()は引き続き呼び出されます(Activity.onResume()と同じコンテキスト)。 FragmentActivity.onResumeFragments()をオーバーライドしても(FragmentActivityが含まれていることを知っているFragmentsからの追加メソッド)。

onResume()onResumeFragments()の違いは何ですか?

FragmentActivity.onResumeFragments()は、含まれているFragmentActivityが再開しているときに関するFragmentsのコールバックです。これはActivityが再開したとき

これはonResume()のフラグメント指向バージョンであり、フラグメントが再開されるのと同じポイントでアクティビティの操作を実行するためにオーバーライドできます。必ずスーパークラスに電話してください。

いつどの方法を使用しますか?

Support-v4ライブラリとFragmentActivityを使用している場合は、FragmentActivity実装でonResumeFragments()ではなくonResume()を常に使用するようにしてください。

FragmentActivity#onResume()ドキュメント

適切な状態のフラグメントを正しく操作するには、代わりにonResumeFragments()をオーバーライドする必要があります。

違いは微妙です。 https://github.com/xxv/Android-lifecycle/issues/8 を参照してください。

onResume()は、v4互換ライブラリを使用する場合の通常のアクティビティおよびonResumeFragments()に使用する必要があります。これは、アプリケーションがFragmentManagerによって最初のFragmentTransactionが完了するのを待機している場合にのみ必要です。

18
shkschneider