Почему мое приложение сворачивается без видимой причины?
TL;DR Мое приложение сворачивается (как если бы была нажата домашняя кнопка), когда я нажимаю значок навигации на панели инструментов после перехода от действия к другому и обратно.
Подробный ход действий:
- Откройте приложение, активность1 подходит
- Нажмите значок навигации (ящик открывается нормально, я могу закрыть и открыть его любое количество раз на этом этапе, нажав значок навигации)
- Нажмите на элемент меню ящика, который запускает Activity2 с флагом
FLAG_ACTIVITY_REORDER_TO_FRONT
- После завершения загрузки Activity2 коснитесь значка навигации, ящик откроется нормально
- Нажмите на элемент меню ящика, который запускает Activity1 с флагом
FLAG_ACTIVITY_REORDER_TO_FRONT
(на данный момент эта деятельность существует, поэтому она выдвинута - После того, как Activity1 выведен на передний план, снова нажмите значок навигации, чтобы открыть ящик
- Ящик начинает выдвигаться слева, но приложение сворачивается до полного его выхода
Я знаю, что приложение свернуто, потому что, когда я открываю его, Activity1 находится на экране с открытым ящиком
Там нет исключений или журнала (уровень на Verbose), и это происходит только на OnePlus Two (приложение отлично работает на Nexus 4)
0 ответов
В моем случае мне нужно переключаться между 2 различными стеками. я использую FLAG_ACTIVITY_REORDER_TO_FRONT
обрабатывать startActivity
а также finish()
,
Но у меня та же проблема, что и у вас, она сводится к минимуму в одном случае:
Класс активности A (экземпляр 1) -> открыть новый класс активности A (экземпляр 2) -> Класс активности B -> переключиться на класс активности A (экземпляр 2) с помощью FLAG_ACTIVITY_REORDER_TO_FRONT
, затем FLAG_ACTIVITY_REORDER_TO_FRONT
вернуться к (экземпляр 1) будет сведено к минимуму (перейти к фону), но если я верну его на передний план, он завершится (), он просто перейдет к фону по неизвестной причине.
Это происходит только в том случае, если два экземпляра класса A в стеке непрерывно. Я проверяю стек adb shell dumpsys window windows | grep 'Window #'
После того, как я попробовал много FLAG
комбинация безуспешно, я выступаю с идеей взломать, то есть создать Distinct
класс деятельности.
Хотя я уже в состоянии обнаружить, что это тот же класс в стеке (использовать registerActivityLifecycleCallbacks
нажать / вытолкнуть стек списка активности), затем, когда я хочу вернуться назад, я просто вызываю Distinct
класс и сделать это finish()
сразу в onCreate()
, Тогда на finish()
код будет FLAG_ACTIVITY_REORDER_TO_FRONT
экземпляр класса A 1. Поскольку класс Distinct не является одним и тем же классом A, он может FLAG_ACTIVITY_REORDER_TO_FRONT
экземпляр 1 и закрытый экземпляр 2 просто отлично.
[ОБНОВИТЬ]
Этот ответ на самом деле глючит, но в итоге я придумаю лучший способ и напишу ответ здесь.