Это мой второй подход к решению этой проблемы, пока не повезло.фрагмент жизненного цикла, когда убит pid
У меня есть MainActivity
, который является активностью запуска.
в пределах своего метода onCreate
. Я проверяю, инициализирован ли static endpoints
.
Если нет -> запустить службу и зарегистрировать приемник (показать загрузчик) ->onReceive
показывают некоторые фрагменты
Если да -> показать фрагменты
Эта часть прекрасно работает.
Итак, в чем проблема?
У меня есть MainActivity
с некоторыми фрагментами. Затем я положил процесс на задний план и сделал
adb shell am kill com.myapp
PID убит. Итак, теперь я хочу снова запустить приложение. Android пытается воссоздать состояние приложения смысл стрельбы:
(Для простоты предположим, что MainActivity
был только один фрагмент видимого во время бега)
MainActivity : onAttachFragment()
Fragment : onAttach()
Fragment : onCreate()
MainActivity : onCreate()
Fragment : onCreateView()
...
Проблема заключается в следующем: Когда MainActiviy.onCreate
видит, что статика не инициализируется то он вызывает вызов Service
и ждет ответа. Это обычный сценарий запуска. Но на этот раз воссоздается Fragment
, а его жизненный цикл смешан с жизненным циклом MainActivity
. Becasuse все происходит асинхронный я не могу предотвратить Fragment
«s onCreate()
, onResume()
, onStart()
, onCreateView()
от стрельбы .. и некоторые из этих методов требуют статики быть инициализирована (MainActivity
не закончил еще процесс инициализации), который вызывает сбой
Итак, мой вопрос:: как я могу предотвратить Fragment
от воссоздания в этом сценарии? так что это предпочтительно чистый старт MainActivity
. Любые намеки на этот момент будут оценены.
не выполнимые решения или «Я пробовал» Решения:
СОХРАНИТЬ статические конечные точки на телефоне -> не может произойти, потому что конечные точки динамически изменяются каждые 5 минут
singleTop
,singleTask
дляMainActivity
Это может быть плохой пользовательский опыт, если у фрагмента есть пользовательский интерфейс! –