如何调试应用程序重启的原因

时间:2014-01-13 15:29:10

标签: android

我不介意让应用程序被Android操作系统杀死,我正在尝试调试应用程序在被低内存情况杀死后重新启动的原因。我正在使用

adb shell dumpsys activity processes

阅读“处理LRU列表(按oom_adj排序):”

我当前的问题是当我执行以下步骤并在每个步骤后读取dumpsys时。

  • App Running

Proc #)13: adj=fore /FA trm= 0 6124:com.thisoldthing (top-activity)

  • 通过后退按钮关闭应用程序

Proc #20: adj=bak /B trm= 0 6124:com.thisoldthing (started-bg-ui-services)

  • 在运行stressrobo后被杀死

Proc #13: adj=svc /B trm=15 8488:com.thisoldthing (started-services)

现在,在将设备置于低内存状态时,应用程序不会被杀死。更令人担忧的是我想知道为什么重新开始。

1 个答案:

答案 0 :(得分:0)

Android会尽力让您的服务保持活力。 Context.startService()的documentation表示:“如果服务进程中发生任何错误,它将自动重新启动。”我的理解和经验让我相信,无论你是从startService()还是bindService()开始,它都会发生,但是最后一个没有提到这一点。

因此,如果您不想重新启动服务,则需要在终止连接之前关闭它。不幸的是,应用程序不能依赖于在kill条件中调用onDestroy(),因此任何unbindService()调用都将依赖于应用程序的生命周期。你需要自己处理它。

最后,绑定连接并非设计为永久保留。他们应该联系,完成工作并解除绑定。牢记这一点,android正确地认为重新启动带有绑定连接的服务。