Деятельность удалена из Back Stack

вступление

Я не уверен, что это ошибка в Android. Однако моя активность удалена из Back Stack и его onCreate Метод никогда не вызывается после подачи заявки.

сценарий

В Back Stack есть 3 вида деятельности:

  • Activity01
  • Activity02
  • Activity03

Когда я блокирую дисплей (выключаю его), я могу запустить камеру с заблокированного экрана. Приложение Камеры не запускается, когда я запускаю его с заблокированного экрана (из-за отсутствия разрешения в нашем приложении MDM поведение при сбое Камеры нормальное). После сбоя камеры отображается диалоговое окно "Камера остановлена". Это тоже нормально. Проблема в том, что после того, как я подтверждаю диалог "Камера остановлена", Activity03 удаляется из Back Stack. BackStack выглядит так:

  • Activity01
  • Activity02

Примечание. Сценарий с запуском приложения "Камера" с заблокированного экрана - всего лишь ярлык для воспроизведения проблемы. Иногда активность разрушается сразу после разблокировки дисплея. К сожалению, это очень трудно воспроизвести и происходит только один / два раза в день. Поэтому я использую сценарий камеры в качестве ярлыка.

Если снова заблокировать экран и запустить приложение "Камера" с заблокированного экрана, приложение снова завершится сбоем, и теперь Activity02 будет удалено. Back Back, тогда, содержит только Activity01:

  • Acitivty01

Решение подсказки / Обсуждение

  • Я понимаю, что совершенно нормально уничтожать активность в любое время с помощью ОС Android. Однако это onCreate метод должен быть вызван, как только приложение выведено на передний план. Или я что-то упустил?
  • Действительно ли Android изменяет историю Back Stack? Например. если недостаточно памяти и Android решает убить ваше приложение? Я понимаю, уничтожено ли приложение, но еще раз: я думаю, что история Back Stack должна быть нетронутой и onCreate должен быть вызван, если приложение выведено на передний план.
  • Я также знаю, что есть android:persistent атрибут можно добавить в AndroidManifest's application элемент. Однако этот атрибут игнорируется, если приложение не работает в "системном пространстве". И это не мой случай, мое устройство не рутировано, и мое приложение должно работать в "пространстве пользователя".
  • Есть ли способ обнаружить, что моя активность была удалена из Back Stack системой, я имею в виду без намерения пользователя? Если да, то я мог бы восстановить активность после возобновления работы приложения. К сожалению, я не могу различить эти 2 сценария - 1. активность была преднамеренно уничтожена пользователем, 2. активность была разрушена ОС Android (например, из-за нехватки памяти)

редактировать

Выход журнала:

Screen locked:

03-05 23:03:41.430 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onPause()
03-05 23:03:41.440 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onStop()

Screen unlocked:

03-05 23:03:54.514 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onRestart()
03-05 23:03:54.514 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onStart()
03-05 23:03:54.514 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onResume()
03-05 23:03:54.554 27370-27370/com.myapp I/ActivityManagerProxy: Timeline: Activity_idle id: android.os.BinderProxy@425a4370 time:821210127
03-05 23:03:54.844 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onPause()
03-05 23:03:56.205 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onStop()
03-05 23:04:00.350 27370-27370/com.myapp I/*atformAbstractActivity: com.myapp.ui.Activity03.onDestroy()

Редактировать 2

Добавлен вывод ActivityManager.MemoryInfo:

Состояние памяти при Activity03.onStart() звонил впервые:

availMem = 315891712
foregroundAppThreshold = 50331648
hiddenAppThreshold = 100663296
visibleAppThreshold = 62914560
secondaryServerThreshold = 100663296
threshold = 100663296
totalMem = 872062976
lowMemory = false

Состояние памяти при Activity03.onStart() вызывается после разблокировки экрана:

availMem = 316497920
foregroundAppThreshold = 50331648
hiddenAppThreshold = 100663296
visibleAppThreshold = 62914560
secondaryServerThreshold = 100663296
threshold = 100663296
totalMem = 872062976
lowMemory = false

Состояние памяти при Activity03.onDestroy() вызывается после разблокировки экрана:

availMem = 317919232
foregroundAppThreshold = 50331648
hiddenAppThreshold = 100663296
visibleAppThreshold = 62914560
secondaryServerThreshold = 100663296
threshold = 100663296
totalMem = 872062976
lowMemory = false

Редактировать 3

Stacktrace of onDestroy() вызов метода:

"<1> main@830034095704" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
      at sk.plaut.mobileplatform.client.ui.MainActivity.onDestroy(MainActivity.java:57)
      at android.app.Activity.performDestroy(Activity.java:5428)
      at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1117)
      at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3473)
      at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3504)
      at android.app.ActivityThread.access$1400(ActivityThread.java:138)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1252)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loop(Looper.java:136)
      at android.app.ActivityThread.main(ActivityThread.java:5034)
      at java.lang.reflect.Method.invokeNative(Method.java:-1)
      at java.lang.reflect.Method.invoke(Method.java:515)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
      at dalvik.system.NativeStart.main(NativeStart.java:-1)

0 ответов

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