Intereting Posts
В чем разница между SPAN_POINT_MARK и SPAN_MARK_POINT? Android Robolectric для тестирования Marshmallow PermissionHelper Как сделать телефонный звонок, используя намерение в Android? XML с библиотекой SimpleXML – производительность на Android Завод по переоборудованию преобразователя не может получить доступ к GsonConverterFactory Как добавить меню переполнения на панель инструментов? Gradle не будет исключать модуль по запросу Текст ниже RadioButtons Найти уже подключенные устройства Bluetooth автоматически, когда они находятся в зоне действия Создание службы android Python для запуска в состоянии приостановки Где запускать сложные алгоритмы? Сторона сервера или клиента? Как установить ProxySettings и ProxyProperties на Android Wi-Fi соединение с помощью Java? Ошибка при установке патчей для перезапуска при запуске приложения для Android с Android Studio 2.0 Это правильный способ использовать Dagger 2 для Android-приложения в модульном тесте для переопределения зависимостей с помощью mocks / fakes? Android adb, извлекать базу данных, используя run-as

Как восстановить стопку назад фрагмента с помощью активности (после того, как приложение убито в backgroud)

Мой вопрос очень прост, я думаю …

Но не могу найти ответ нигде!

В приложении для Android

Скажите am в activiy- MyActivity, который содержит по одному фрагменту за раз.

Сначала я загрузил Fragment A (без тегов я добавил его обратно в стек менеджера фрагментов)

Затем в какой-то момент я загрузил Fragment B (без тегов я добавил его обратно в стек менеджера фрагментов)

Затем в какой-то момент я загрузил Fragment C (без тегов я добавил его обратно в стек диспетчера фрагментов)

Я использую popbackstack, чтобы включить поведение кнопки обратной связи. Поэтому, когда я когда-либо нажимаю Fragment C, поток похож на

Фрагмент C-> Фрагмент B-> Фрагмент A -> Закрыть MyActivity ..

Каждая вещь идеальна 🙂

Но если я в Fragment C и приложение погибает в фоновом режиме (я не использовал флаг активности из настроек)

И вернуться в онлайн Фрагмент C загружается в MyActivity

Но стоп-менеджер менеджеров фрагментов содержит только фрагмент C ..

Кнопка «Назад» испортила это

Фрагмент C -> Закрыть MyActivity ..

Почему это так?

Как правильно восстановить управление фрагментами в стеке с помощью операции?

Solutions Collecting From Web of "Как восстановить стопку назад фрагмента с помощью активности (после того, как приложение убито в backgroud)"

Попытайтесь использовать alwaysRetainTaskState в своей корневой активности. Android автоматически очищает Backstack Activity, потому что предполагает, что прошло много времени с момента использования приложения и что пользователь хочет начать с самого начала.

<activity android:alwaysRetainTaskState="true"/> 

Этот параметр предотвратит это поведение и может следовать, что поведение наследуется Менеджером фрагментов.

При разработке приложения я рекомендую протестировать восстановленные / сохраненные состояния действий, фрагменты с АБР:

  1. Открыть приложение
  2. Перемещение между действиями
  3. Пресс-центр
  4. ADB -> Убить (остановить) приложение
  5. Нажмите стек приложения (кнопка меню с устройства) и возобновите приложение

Таким образом вы можете отлаживать сохраненные / восстановленные состояния.

Если у вас нет сложного приложения, я предлагаю вам обработать состояние сохраненного / восстановленного в действии:

 private Fragment1 mFragment; @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); // ... if (savedState == null) { mFragment = new Fragment1(); getFragmentManger().beginTransacation().add(mFragment, TAG).addToBackStack(TAG).commit(); } else { mFragment = getFragmentMananager().findFragmentByTag(TAG); } } 

Если у вас есть несколько Fragments или ViewPager или вложенные фрагменты, все может стать очень сложным. Я предлагаю вам перезапустить все приложение:

 @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); if (savedState != null) { Intent intent = new Intent(ActivityMain.this, ActivityMain.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); return; } } 

Если вы хотите обрабатывать каждое состояние сохранения / восстановления, прочитайте это сообщение: http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html

Попробуйте этот метод

 public void setRetainInstance (boolean retain) 

Контролируйте, сохраняется ли экземпляр фрагмента во время повторного создания активности (например, при изменении конфигурации). Это можно использовать только с фрагментами, не входящими в задний стек. Если установлено, жизненный цикл фрагмента будет немного отличаться при воссоздании активности:

С сайта разработчика http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance%28boolean%29

Фрагмент C никогда не должен загружаться после того, как ваше приложение умрет. У вас есть фрагмент Init в вашем приложении? В идеале, когда вы реализуете поп-фрагменты, должен быть экран Init. Если приложение умирает или убивается по соображениям памяти, приложение должно начинаться с фрагмента A (Init Fragment). Не из фрагмента C.

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