Почему мое приложение сворачивается без видимой причины?

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 просто отлично.

[ОБНОВИТЬ]

Этот ответ на самом деле глючит, но в итоге я придумаю лучший способ и напишу ответ здесь.

Другие вопросы по тегам