Почему Android вызывает onDestroyView фрагмента при добавлении нового фрагмента? - PullRequest
0 голосов
/ 22 января 2020

Мне интересно, почему onDestroyView должен вызываться, когда onDestroy не вызывается. Это в основном влияет на инициализацию, выполненную в onCreateView, которая требует выполнения только один раз в течение всего жизненного цикла фрагмента. Существуют инициализации, зависящие от представления root, созданного в onCreateView, но тогда инициализация не должна выполняться в случае, если фрагмент не виден, потому что к операции должен быть присоединен другой фрагмент.

Я знаю, что свойство может использоваться в классе для проверки таких повторных инициализаций, но это больше похоже на взлом.

1 Ответ

0 голосов
/ 22 января 2020

Фрагмент может go через 4 состояния жизненного цикла:

  1. Инициализировано - создается и обрабатывается FragmentManager
  2. Создано / Запущено - фрагмент добавлен в FragmentManager, onCreate и onStart называется
  3. Resumed - фрагмент, прикрепленный к FragmentManager, onResume и onCreateView, называется
  4. Destroyed - фрагмент удален из FragmentManager, onStop и onDestroy вызывается (если фрагмент все еще возобновлен onPause и onDestroyView также вызывается заранее)

При желании вы можете Pause фрагмент, отсоединив его, но НЕ удалив его от FragmentManager. Это вызывает onPause и onDestroyView и позволяет вам перемещаться между состояниями 2 и 3.

Это немного сбивает с толку, но используется в некоторых случаях, например ViewPager, где вы хотите сохранить фрагмент живым, но свободным памяти или перезапустите View для другой страницы во время прокрутки.

...