Ответ 1
Я исследовал больше и, по-видимому, разница между detach()
и addToBackStack ()
заключается в жизненном цикле фрагмента. Когда мы добавляем фрагмент в задний стек, вызывается последовательно методы onPause()
, onStop()
и после onDestroyView()
. В этом состоянии фрагмент очищает ресурсы, связанные с его просмотром, и "остается" там в ожидании повторного вызова. Возвращение к макету из заднего стека называется методом onCreateView()
только для фрагмента, чтобы нарисовать его пользовательский интерфейс. На самом деле, фрагмент не уничтожен.
С другой стороны, когда мы используем detach()
для удаления или замены фрагмента, вызываются последовательно все те же методы, которые цитировались первыми (onPause()
, onStop()
, onDestroyView()
), добавляя эти два метода: onDestroy()
, чтобы выполните окончательную очистку состояния фрагмента и onDetach()
, чтобы отделить фрагмент от того, что он больше не связан с его активностью.
По сути, за кадром у них не одинаковое поведение: при использовании addToBackStack()
фрагменты остаются инстанцированными, а detach()
- нет.