如何在Android上测试“App Process Killed”路线?

问题描述:

在Android应用程序活动生命周期的流程图中(如下所示),有一条路线用于“应用程序进程”被终止,并且不会调用onDestroy()。看起来这通常是为了释放不同活动的内存资源。如何在Android上测试“App Process Killed”路线?

这一切都很好,但我该如何测试这种情况?无论是在设备上还是在模拟器中。

enter image description here

+0

你可以通过仪器测试案例 – Bhargav

如果您强制停止您的应用程序,则所有BroadcastReceivers以及扩展BroadcastReceiver的应用程序窗口小部件都将停止工作。另请参阅Commonsware的this SO post

因此,强制停止应用程序不适合在低内存条件下测试应用程序行为。你还能做什么?

  • 一个选项:编写自己的任务杀手应用程序并使用ActivityManager.killBackgroundProcesses()。正如documentation说:

这是一样的内核杀死这些进程回收内存

+0

接受这个答案,因为它似乎导致了我想追踪的问题。我用哈维吉尔的答案,但我认为第一种选择可能是最好的答案。 – Wex

+1

@Wex - 我使用CommonsWare的[code](https://github.com/commonsguy/cw-omnibus/tree/master/Tasks/Nukesalot) – 0X0nosugar

步骤:

  1. 浏览到您的应用程序
  2. 按Home键,因此该应用将无法获得的onDestroy调用
  3. 进入系统设置,并找到合适的地方“强行关闭“您的应用程序
  4. 导航回到您的应用程序

重要注意事项:当您要进入系统设置时,请勿在离开您的应用程序时使用后退按钮,而应使用主屏幕按钮,以免应用程序死亡。

+0

'使用home按钮来测试这个,所以应用程序不会被终止'只是为了解决这个问题:不能保证当你按下主页按钮时你的应用程序不会被杀死。有一个低资源设备,甚至默认启动程序可能“重”足以让所有的应用程序在后台被Android杀死。 – WarrenFaith

+0

是的,我知道,但这只是完美世界中的一个例子。 – vilpe89

+0

'是的,我知道'应该阻止你提到这一点。 – WarrenFaith

测试这些生命周期的最简单和最干净的解决方案是在设备的开发人员设置中启用“不保留活动”设置。

这样,您甚至可以在开始新活动后立即让活动中止。所以如果你按回来,旧的活动将被重新创建。

+0

告诉我这个解决方案如何去那条他想要的路线。这只是通过onDestroy破坏活动......或者我错了吗? – vilpe89

+0

两条路径都是一样的。正如您在文档和图中看到的,OnDestroy不保证被调用。因此,无论您的应用程序在onStop中死亡,或者您的活动被终止并且可能会调用onDestroy。基于“不保证被调用”,你不应该在onDestroy中添加任何代码。 – WarrenFaith

+0

我不认为启用“不保留活动”会杀死整个应用程序进程。所以这个漏洞也是。你用这段代码添加东西是正确的。它应该在onPause并使用isFinishing方法进行检查。 – vilpe89