Intereting Posts
Как настроить мою персональную клавиатуру в качестве стандартного ввода в моем приложении Может ли кто-нибудь проиллюстрировать возвращение «onOptionsItemSelected»? Режим «Доза» / «Ожидание приложения» во время воспроизведения аудио Просмотр не подключен к оконному менеджеру (что такое решение?) Используйте параметры FlurryAgent.onEvent (String eventId, Map <String, String>) Spinner с пользовательским ArrayAdapter для объектов, не отображающих выбранный элемент Сделать вид сверху вниз Не найдено никакой активности пусковой установки! Не удается заставить виджет работать Android – дубликаты событий ListView Масштабирование и перевод растрового изображения в android ViewPager + Fragments – Фрагмент не показан EditText, очистить фокус при касании снаружи Интегрируйте Dropbox в приложение для Android, но без входа в систему Match_parent не работает для панели инструментов с макетом внутри Обнаружение изменений выбора в WebView

Фрагменты остаются после того, как активность Get убита и воссоздана

У меня есть FragmentActivity (Фрагменты поддержки), где я создаю фрагменты по коду и помещаю их в FrameLayouts. Пока все работает нормально. Теперь, если я оставлю приложение возвратом, все будет в порядке, пока система не будет убивать мою активность (или я делаю это с кнопкой остановки в DDMS). Если это произойдет, ничего не получится, и моя активность будет убита. OnDestroy не называется.

Поэтому, когда я снова открываю свое приложение, все фрагменты все еще существуют, и я получаю NullPointerExeptions, потому что они пытаются выполнить свою работу. Фрагменты не должны существовать в этом состоянии приложения, так что это проблема для меня.

Мне не нужны они в backStack, поэтому я их не кладу и не могу вызвать popBackStack (), чтобы избавиться от них.

Как я могу сбросить свой FragmentManager в onCreate () или просто убедиться, что фрагменты также уничтожены?

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

  • Сохранить состояние фрагмента в onSaveInstanceState
  • Восстановить состояние – пакет savedState предоставляется фрагменту в нескольких методах ( onCreate , onCreateView и т. Д.).

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

Это на самом деле может быть нормальным. Вместо того, чтобы создавать и уничтожать много фрагментов, Android может поддерживать их. Особенно это происходит с ViewPagers.

Вы используете много вызовов getActivity () или вызовов, получающих контекст? Если да, нуль проверяет вызов getActivity (), делая что-то простое

 Activity activity = getActivity(); if ( activity == null ) { Log.w("activity null!", "This will cause a crash if you access this variable!"); } 

Еще один совет – следить за AsyncTasks. Если у вас есть какие-либо из них, выполняемые в фоновом режиме, вам нужно будет отслеживать, активна или мертва. Я думаю, что в последующих версиях Android есть проверки жизненного цикла, но вы также можете сохранить логический флаг onAttach () и onDetach ().

Я знаю, что это очень поздно, но у меня такая же проблема, и я нашел ответы здесь

Поддержка FragmentPagerAdapter содержит ссылку на старые фрагменты

и здесь

ViewPager и фрагменты – какой способ сохранить состояние фрагмента?

Я предполагаю, что проблема в том, что когда вы создаете активность, вы создаете и сохраняете фрагменты в некотором списке, а не в menager men. Когда активность создается снова, он также создает фрагмент, но менеджер фрагментов использует фрагмент, который был создан ранее. Таким образом, ваш фрагмент возвращает null для getActivity (), потому что этот фрагмент создан ранее, чем вы положили приложение в фоновом режиме.

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

Итак, попробуйте использовать childFragmentManager вместо supportFragmentManager и посмотреть, исправляет ли он вашу проблему.