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。


当前回答

您可以执行以下步骤来重现所寻找的行为:

打开你的应用,导航到顶部活动 使用通知面板导航到任何另一个全屏应用程序(例如,到系统设置-在右上角) 终止应用程序进程 按后退按钮

其他回答

注意:根据下面一个有用的评论,只有当你不关心静态值被清除时才使用这个。

在“设置”下的“开发人员选项”中,选择“不保留活动”,一旦你离开活动,就会立即销毁活动。

我不确定这就是你想要的答案,这更像是一种逻辑思考。

我不认为你可以做一个完全自动化的测试,模拟它的唯一方法是重新创建它,也就是有太多的活动,Android会杀死你的应用程序。

所以我的想法或建议是制作另一个小应用程序,它会不断弹出新的活动,直到Android耗尽内存并开始在后台杀死进程。

行内的东西:

如果应用程序在列表中,则增加i并重新启动循环,但不关闭当前活动,否则->减少i并关闭当前活动,返回上一个并重新检查…

问题的根源似乎是当你终止进程时,你的Activity处于前台。

当Activity可见时,你可以通过在DDMS中按下stop来观察这一点(发生的正是你所描述的),并将其与home后按下stop并稍后返回应用程序进行比较。

只需确保在测试中以某种方式moveTaskToBack(true)。

您可以执行以下步骤来重现所寻找的行为:

打开你的应用,导航到顶部活动 使用通知面板导航到任何另一个全屏应用程序(例如,到系统设置-在右上角) 终止应用程序进程 按后退按钮

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