Активность возобновляется на Force Close - PullRequest
11 голосов
/ 25 мая 2011

У меня есть приложение с одним корневым действием.Недавно мне довели до сведения, что любой вид 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 android.os.BinderProxy@40c774e0 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}

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

РЕДАКТИРОВАТЬ: Это было вызвано тем, что я установил android: stateNotNeeded = "true" в моем манифесте.Хотя мне не нужно состояние, это заставило Android решить, что лучше всего перезапустить мое приложение, исходя из предположения, что пользователь этого захочет.

Ответы [ 3 ]

15 голосов
/ 25 мая 2011

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

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

1 голос
/ 10 мая 2013

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

0 голосов
/ 23 сентября 2016

если приложение имеет android: persistent = "true" в манифесте, оно будет перезапущено после смерти.

...