Когда будет вызван фрагмент onDestroyView, но он не будет уничтожен?

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

  • вызывать соответствующие обратные вызовы, уничтожать просмотр, а затем уничтожать фрагмент
  • вызвать обратные вызовы, уничтожить просмотр, но сохранить сам фрагмент

Какая из двух альтернатив выполняется в ситуациях? Что решает, кто из них? Если фрагмент добавлен в стопку, затем удаляется/заменяется, почему бы не выбросить его? Зачем держать его?

Изменить: это меня осенило, может ли он зависеть от того, сохранился ли фрагмент или нет?

enter image description here

Ответ 1

Кажется, все зависит от того, сохранился ли фрагмент или нет. Когда фрагмент сохраняется, то после onDestroyView появляется onCreateView.

Когда фрагмент сохраняется (т.е. setRetainInstance (true)), тогда журнал при вращении devicelooks выглядит следующим образом:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume

Но когда он не будет сохранен, он будет выглядеть следующим образом:

com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onPause
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStop
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroyView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDestroy
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onDetach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onAttach
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreate
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onCreateView
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onActivityCreated
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onStart
com.example.FragmentLifecycleTestApp W/MainFragment﹕ onResume

Ответ 2

Посмотрите на диаграмму:

States of Activity, Fragment and Fragment Manager

Это явная визуализация всех состояний жизненного цикла. Наслаждаться.

Ответ 3

Когда фрагмент сохранен (то есть setRetainInstance (true)),

if setRetainInstance (true) Тогда: - OnDestroy() не вызывается и снова откройте fragemnt, затем onCreate() не вызывается

но когда setRetainInstance (false): - тогда вызывается фрагмент всего жизненного цикла