#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" После этого система перестала пересоздавать это активити с нуля
Комментариев нет:
Отправить комментарий