Разница между onResume() и onResumeFragments()

FragmentActivity.onResume() javadoc:

Отправка onResume() в фрагменты. Обратите внимание, что для лучшего взаимодействия со старыми версиями платформы, в момент этого вызова фрагменты, связанные с активностью, не возобновляются. Это означает, что в некоторых случаях предыдущее состояние может быть сохранено, а не разрешать операции фрагментации, которые изменяют состояние. Чтобы правильно взаимодействовать с фрагментами в правильном состоянии, вместо этого вы должны переопределить onResumeFragments().

FragmentActivity.onResumeFragments() javadoc:

Это ориентированная на фрагмент версия onResume(), которую вы можете переопределить для выполнения операций в Activity в той же точке, где ее фрагменты возобновлены. Обязательно всегда обращайтесь к суперклассу.

Означает ли это, что платформа гарантирует, что:

  • фрагменты никогда не будут возобновлены (их onResume() не вызывается) при выполнении FragmentActivity.onResume() и
  • фрагменты всегда будут возобновлены (их вызов onResume()) при выполнении FragmentActivity.onResumeFragments()?

Если нет, то как разработчик может правильно использовать и проявлять бдительность в отношении вышеперечисленного?

Ответы

Ответ 1

Вызов onResume()?

Да, FragmentActivity.onResume() все равно будет вызываться (тот же контекст, что и Activity.onResume()). Даже если вы переопределите FragmentActivity.onResumeFragments() (дополнительный метод из FragmentActivity, который знает, что он содержит Fragments).

В чем разница между onResume() и onResumeFragments()?

FragmentActivity.onResumeFragments() - это обратный вызов на FragmentActivity в том случае, когда он содержит Fragments, который не совпадает с повторением Activity.

Это ориентированная на фрагмент версия onResume(), которую вы можете переопределить для выполнения операций в Activity в той же точке, где ее фрагменты возобновлены. Обязательно всегда обращайтесь к суперклассу.

Когда использовать какой метод?

Если вы используете библиотеку поддержки-v4 и FragmentActivity, всегда старайтесь использовать onResumeFragments() вместо onResume() в реализациях FragmentActivity.

Документация FragmentActivity # onResume():

Чтобы правильно взаимодействовать с фрагментами в правильном состоянии, вместо этого вы должны переопределить onResumeFragments().

Разница тонкая, см. https://github.com/xxv/android-lifecycle/issues/8:

onResume() следует использовать для обычной Activity и onResumeFragments() при использовании библиотеки совместимости v4. Это требуется только тогда, когда приложение ожидает, что начальное FragmentTransaction будет завершено FragmentManager.