12

我有一个带有单个根 Activity 的应用程序。我最近注意到我的活动上的任何强制关闭都会导致它重新启动,我不知道为什么会发生这种情况。如果我强制未捕获的异常或使用“长按强制关闭”选项,它们都会导致相同的结果。

我唯一的猜测是与保留对 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 决定最好在假设用户想要的情况下重新启动我的应用程序。

4

3 回答 3

16

这里有一些有用的信息:

至于何时重新启动活动 - 如果运行前台活动的进程消失,如果它没有有效的保存状态,系统将丢弃该活动(通常意味着它已暂停并已为系统提供暂停前 onSaveInstanceState 的结果)。一旦决定是否丢弃该活动,它将恢复现在位于堆栈顶部的任何活动。如果这是您的活动之一——或者因为您在崩溃的活动后面有另一个活动,或者因为崩溃的活动以某种方式处于已解决的暂停状态 – 那么它将再次启动您的流程以显示该顶级活动

于 2011-05-25T08:07:51.153 回答
1

这可能是由于调用了目标设备上不可用的系统 API 造成的。我遇到了类似的问题,然后尝试在 4.0.x 设备上调用 ActivityManager.MemoryInfo.totalMem。我没有收到任何编译错误,因为我的目标是 4.2.2,并且在 API16 (4.1) 中添加了 ActivityManager.MemoryInfo.totalMem

于 2013-05-10T16:57:08.450 回答
0

如果应用在 manifest 中有 android:persistent="true" ,它会在被杀死时重新启动。

于 2016-09-23T04:26:19.657 回答