Android会杀死一个进程,如果它在后台,而操作系统决定它需要资源(RAM, CPU等)。我需要能够在测试期间模拟这种行为,以便确保我的应用程序行为正确。我希望能够以自动的方式执行此操作,以便无论何时发生此操作,我都可以测试应用程序的行为是否正确,这意味着我必须在每个活动中测试它,等等。

我知道如何终止我的进程。这不是问题所在。问题是当我杀死我的进程(使用DDMS, adb shell kill, process . killprocess()等)时,Android不会像Android操作系统杀死它一样重新启动它。

如果Android OS杀死了进程(由于资源需求),当用户返回到应用程序时,Android将重新创建进程,然后重新创建活动堆栈上的顶部活动(调用onCreate())。

另一方面,如果我杀死进程,Android假设活动堆栈顶部的活动表现不佳,因此它自动重新创建进程,然后从活动堆栈中删除顶部活动,并重新创建顶部活动下面的活动(调用onCreate() ')。这不是我想要的行为。我想要与Android终止进程时相同的行为。

简单地解释一下,如果我的activity栈是这样的:

    ActivityA -> ActivityB -> ActivityC -> ActivityD

如果Android终止了该进程,用户返回到应用程序,Android将重新创建该进程并创建ActivityD。

如果我杀死了进程,Android会重新创建进程并创建ActivityC。


当前回答

另一个方法,可能是可脚本化的,因为它不需要DDMS:

一次性设置:转到开发人员选项,选择后台进程限制设置,将值从“标准限制”更改为“无后台进程”。

当需要重新启动进程时,请按home键。进程将被杀死(你可以在logcat/Android Monitor studio中验证—进程将被标记为[DEAD])。然后使用任务切换器切换回应用程序。

其他回答

我迟到了,在我之前的几个人给出了同样的正确答案,但为了简化,只要按下home键并运行以下命令:

Adb shell ps | grep <包名> | awk '{print $2}' | xargs Adb shell run-as <包名再次> kill

应用程序不会失去状态,从我自己的经验来看,这与操作系统在后台杀死应用程序的方式相同。这只适用于调试构建的应用程序

这是你在Android Studio中如何做到的。

在调试模式下将设备连接到计算机。 在你的设备上打开应用程序,去任何你想测试“死而复生”的活动。 按下设备上的Home键。 在Android Studio中进入Android Monitor -> Monitors并按下终止应用程序图标。 现在你可以通过最近的应用程序回到你的应用,或者点击它的启动器图标,在我的测试中,行为是一样的。

另一个方法,可能是可脚本化的,因为它不需要DDMS:

一次性设置:转到开发人员选项,选择后台进程限制设置,将值从“标准限制”更改为“无后台进程”。

当需要重新启动进程时,请按home键。进程将被杀死(你可以在logcat/Android Monitor studio中验证—进程将被标记为[DEAD])。然后使用任务切换器切换回应用程序。

用HOME键把应用程序放在后台

在Android Studio中选择“Logcat”模式的进程,然后单击左下角的“终止应用程序”

现在在Android设备上启动你的应用程序


编辑:根据互联网,以下也适用:

 adb shell am kill [my-package-name]

来自未来的编辑:需要注意的是,在Android Studio 4.0中有一个变化,如果你使用从AS运行,那么终止将发出一个强制停止。

然而,如果你随后从启动器启动,然后你尝试以这种方式模拟它,然后你会得到你想要的结果(低内存行为)。

你也可以用adb shell从终端连接到你的设备/模拟器,然后用ps | grep <your_package_name获取你进程的PID,然后执行kill -9 < PID >。然后从最近的应用程序选择器中打开最小化的应用程序,它将重新启动最后一个活动