Фрагмент Back Stack onSaveInstanceState Поведение

Я играю со стеком фрагментов и заметил странное поведение. Я написал простую тестовую программу, состоящую из одного действия с контейнером фрагментов. У меня есть две кнопки: одна заменяет текущий фрагмент новым экземпляром фрагмента А, а вторая заменяет текущий фрагмент новым экземпляром фрагмента В.

// On Button A click:
FragmentA fragment = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentA).addToBackStack(null).commit();


// On Button B click:
FragmentB fragment = FragmentB.newInstance();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentB).addToBackStack(null).commit();

Я регистрируюсь каждый раз, когда фрагмент вызывает onSaveInstanceState.

Когда я добавляю 10 экземпляров Fragment A подряд, а затем выполняю остановку действия, я получаю только 2 вызова onSaveInstanceState.

Когда я чередую добавление FragmentA, FragmentB, FragmentA, FragmentB и т. Д., Я получаю такое же количество вызовов onSaveInstanceState, как и фрагменты в заднем стеке.

Теперь вот кикер. Если я добавляю 10 экземпляров Fragment A в ряд, но устанавливаю поле (например, простое поле int) для всех остальных, я получаю 10 вызовов onSaveInstanceState.

Напротив, если в заднем стеке есть 10 экземпляров Fragment A, каждый с одинаковыми точными значениями поля, то я получаю только 2 вызова onSaveInstanceState.

Что тут происходит? Делает ли Android что-то особенное, когда он замечает несколько фрагментов одного типа и одинаковых значений полей в заднем стеке и, следовательно, вызывает только onSaveInstanceState для некоторых из них?

0 ответов

Другие вопросы по тегам