Подтвердить что ты не робот

Активность перезапускается на Force Close

У меня есть приложение с одним активным корнем. Недавно я обратил на это внимание, что любой вид Force Close моей активности приводит к перезапуску, и я понятия не имею, почему это может произойти. Если я заставляю неперехваченное исключение или использовать параметр "long back press to force close", они оба приводят к тому же.

Мое единственное предположение было бы какой-то формой причуды, связанной с сохраненными ссылками на какую-то часть Activity, только у меня нет каких-либо за пределами некоторых записей WeakReference на уровне приложения.

Соответствующие записи logcat:

05-25 08:25:49.137: INFO/ActivityManager(18449): Displayed uk.co.randomicon.rstb/.TreeBuilderActivity: +8s82ms
05-25 08:25:54.222: DEBUG/dalvikvm(18546): GC_EXPLICIT freed 12K, 57% free 3640K/8327K, external 8323K/10136K, paused 72ms
05-25 08:25:55.373: WARN/InputManagerService(18449): Got RemoteException sending setActive(false) notification to pid 19122 uid 10069
05-25 08:25:59.217: DEBUG/dalvikvm(18646): GC_EXPLICIT freed 128K, 48% free 2980K/5703K, external 0K/0K, paused 67ms
05-25 08:26:00.238: DEBUG/dalvikvm(18991): GC_CONCURRENT freed 343K, 51% free 2794K/5639K, external 303K/532K, paused 3ms+3ms
05-25 08:26:02.950: INFO/Process(18449): Sending signal. PID: 19554 SIG: 9
05-25 08:26:02.980: INFO/ActivityManager(18449): Process uk.co.randomicon.rstb (pid 19554) has died.
05-25 08:26:02.990: ERROR/InputDispatcher(18449): channel '40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
05-25 08:26:02.990: ERROR/InputDispatcher(18449): channel '40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-25 08:26:02.990: INFO/WindowManager(18449): WINDOW DIED Window{40a16ec8 uk.co.randomicon.rstb/uk.co.randomicon.rstb.TreeBuilderActivity paused=false}
05-25 08:26:03.010: WARN/WindowManager(18449): Failed looking up window
05-25 08:26:03.010: WARN/WindowManager(18449): java.lang.IllegalArgumentException: Requested window [email protected] does not exist
05-25 08:26:03.010: WARN/WindowManager(18449):     at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8177)
05-25 08:26:03.010: WARN/WindowManager(18449):     at com.android.server.WindowManagerService.windowForClientLocked(WindowManagerService.java:8168)
05-25 08:26:03.010: WARN/WindowManager(18449):     at com.android.server.WindowManagerService$WindowState$DeathRecipient.binderDied(WindowManagerService.java:7026)
05-25 08:26:03.010: WARN/WindowManager(18449):     at android.os.BinderProxy.sendDeathNotice(Binder.java:385)
05-25 08:26:03.010: WARN/WindowManager(18449):     at dalvik.system.NativeStart.run(Native Method)
05-25 08:26:03.010: INFO/WindowManager(18449): WIN DEATH: null
05-25 08:26:03.020: INFO/ActivityManager(18449): Start proc uk.co.randomicon.rstb for activity uk.co.randomicon.rstb/.TreeBuilderActivity: pid=19565 uid=10069 gids={1015}

Любые идеи, в которых даже начинать вызывать, будут с благодарностью приняты!

EDIT: Это было вызвано установкой android: stateNotNeeded = "true" в моем манифесте. В то время как мне не нужно состояние, это заставило Android решить, что лучше всего перезапустить мое приложение в предположении, что пользователь захочет этого.

4b9b3361

Ответ 1

Здесь есть полезная информация:

В случае перезапуска активности - если процесс, выполняющий деятельность переднего плана исчезает, система отбрасывает эту активность, если для него нет допустимого сохраненного состояния (обычно это означает, что он приостановлен и дал системе результат onSaveInstanceState от Пауза). Как только он решил, отбрасывать или нет, это будет возобновлена ​​всякая активность в верхней части стека. Если это одно из ваших действий - либо потому, что у вас есть другой за одним который разбился, или тот, который разбился, был каким-то образом установленным условием паузы - затем он снова запустит ваш процесс, чтобы показать, что верхняя активность.

Ответ 2

Это может быть вызвано вызовом системного API, который недоступен на вашем целевом устройстве. Я столкнулся с аналогичной проблемой, а затем попытался вызвать ActivityManager.MemoryInfo.totalMem на устройстве 4.0.x. Я не получал ошибок компиляции, поскольку я настраивал 4.2.2 и ActivityManager.MemoryInfo.totalMem был добавлен в API16 (4.1)

Ответ 3

Если приложение имеет android: persistent = "true" в манифесте, оно перезапустится при его уничтожении.