Страницы

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

вторник, 15 января 2019 г.

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

Есть активити 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


Ответ

Если вы делаете переход назад 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
удачи

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

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