Фрагменты Android с наблюдаемыми.Когда добавить и заменить другие фрагменты - PullRequest
0 голосов
/ 23 декабря 2018

Вопрос о другом фрагменте.

Для контекста:

  • Одно приложение-активность с двумя фрагментами: «Домой» и «Настройки».
  • Моя деятельность сразу добавляет «Домой», когда приложениеЗапускается.
  • На этом экране пользователь может нажать значок настроек для просмотра фрагмента настроек.

Именно в этот момент я не уверен, стоит ли мне использовать #добавьте или # замените , чтобы показать мой фрагмент настроек.


Позвольте мне объяснить, почему.

  1. Заменить

Замена фрагмента довольно крутая.У этого есть хорошая анимация входа / выхода для обоих фрагментов.И вызываются методы жизненного цикла paused-> destroy в Home, позволяющие удалить любые наблюдаемые и освободить ссылки, которые больше не нужны, так как представление больше не отображается.

Однако, когда я нажимаю кнопку «Назад», чтобы открыть «Настройки», теперь «Домашняя страница» должна воссоздать себя.Так как происходит несколько вещей и несколько сложный список, я получу падение частоты кадров ниже 60 кадров в секунду для одного кадра (с помощью инструмента gpu profiling ).Некоторые телефоны могут питаться через это, но такие, как Nexus 5, не могут и имеют уродливый эффект перехода и задержку задержки (возможно, 500 мс-1 с) до того, как вид фактически выскочит после нажатия кнопки.

Добавить

Добавление фрагмента тоже довольно круто.У него нет проблем с частотой кадров при переходе назад.Так что на всех моих тестовых устройствах он выглядит красиво и гладко.

Однако на самом деле он не выходит из вида.Так что нет анимации выхода.События жизненного цикла для выпуска наблюдателей также не вызываются, поэтому он по-прежнему изменяет представление на изменения, которые он получает, даже если пользователь его не видит.


Итак, какое решение подходит для моего случая?Есть ли на это обычный ответ?Или есть что-то еще, что я должен делать?Должен ли я рефакторинг большого количества кода для оптимизации замены фрагмента?Или Дом может сидеть на заднем плане и слушать события?

1 Ответ

0 голосов
/ 23 декабря 2018

В случае, если ваши данные нужно сохранить на странице настроек и перемещаться туда-сюда, было бы полезно добавить строку

transaction.addToBackStack(null);  

, но,

, если вы пройдете домой-settings-home еще несколько раз, тогда у вас будут большие неприятности после нажатия кнопки «Назад».Это событие будет перемещено обратно в ваш стек до тех пор, пока не останется последняя страница фрагмента.

Поэтому, для простоты, при добавлении фрагмента настроек не используйте

transaction.addToBackStack(null);   

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

...