Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Активити создается с нуля при возвращении из нового активити

#android


Есть активити MainActivity, содержащее пару фрагментов прописанных через xml. Также
есть еще одно активити, запускаемое из MainActivity. При возвращении из это нового
активити в основное происходит следующее: сначала вызывается метод onDestroy основного
активити который также убивает все фрагменты, а затем все создается заново как при
простом запуске.

Может кто ни будь объяснить мне такое поведение андроида и как тогда сохранить между
такими пересоздаваниями состояния активити и фрагментов. Например Текст или изображения,
заданные не через xml, а в коде или массив данных?

ЗЫ. Руководствовался этой схемой, но вроде бы они все одинаковые в интернете и на
всех схемах onDestroy вызывается только при уничтожении активити

// Старт приложения
MainActivity.onCreate called

PlayerFragment.onCreate called
PlayerFragment.onCreateView called

PlaylistFragment.onCreate called
PlaylistFragment.onCreateView called

MainActivity.onResume called

// Запуск нового активити
PreferencesActivity.onCreate called

// Жмем кнопку назад
MainActivity.onDestroy called  // Почему это а не onResume?
PlayerFragment.onDestroy called
PlaylistFragment.onDestroy called

MainActivity.onCreate called
PlayerFragment.onCreate called
PlayerFragment.onCreateView called
PlaylistFragment.onCreate called
PlaylistFragment.onCreateView called

MainActivity.onResume called

    


Ответы

Ответ 1



Если вы делаете переход назад onBackPressed() или finish() покажите ваш манифест. Исходя из вашего ответа вы выставили определенную стратегию в launchMode, аналогичное поведение было бы если бы у вас стояло android:launchMode="singleInstance" или android:launchMode="singleTask" после этого вы заменили на android:launchMode="singleTop" и это standart condition, те обычное поведеине со стратегией не создавать новый экземплер если он на вершине стека. Возмоно также вы делали переход с помощью намерениея Intent, здесь тогда все становится намного сложней. Вам кажется что вы сделали переход назад, но по факту вам ещё нужно следить за PreferencesActivity она у вас ещё в стеке, вы выставили singleTop и просто не пересозадил активити с вершиной на стеке, будьте внимательны использую задачи и стек переходов, это очень важно. Вы можете, сделать серфинг по приложению - бесшовным и плавным при этом экономить проц время и объем потреблям трафика. Здесь есть все для того чтоб понять суть https://developer.android.com/guide/components/tasks-and-back-stack?hl=ru удачи

Ответ 2



Это очень странно, но помогло добавление атрибута основной активити android:launchMode="singleTop" После этого система перестала пересоздавать это активити с нуля

Комментариев нет:

Отправить комментарий