安卓中有2种类型的进程死亡:
- 系统启动的进程死亡
- 用户启动的进程死亡
系统启动的进程死亡意味着进程被 Android 操作系统终止。这可能是由于资源限制(内存不足)或仅仅是配置更改(屏幕旋转)。
用户启动的进程死亡意味着进程被用户终止。例如,单击主页按钮,然后手动关闭后台应用。
通常作为开发人员,您只关心系统启动的进程死亡,因为您需要保存 UI 状态。对于用户启动的进程死亡,不需要保存 UI 状态。
系统启动的进程死亡
1. 使用 Logcat 终止应用程序按钮
模拟系统启动的进程死亡的最简单方法是使用 Logcat 终止应用程序按钮。
- 您按下主屏幕按钮。
-
然后,使用 Logcat 终止应用程序按钮,如下所示。
在设备监视器中强制停止 != Logcat 终止应用程序
在设备监视器中,有2个选项:
终止进程 - 相当于命令adb shell am kill
强制停止进程 - 相当于命令adb shell am force-stop
强制停止进程确实会终止进程,但它不会模拟系统启动的进程死亡。它模拟用户启动的进程死亡,这与使用 adb shell am 强制停止命令完全相同。
2.设置无后台进程 - 开发人员选项
我所知道的唯一解决方法是在开发人员选项中不设置后台进程。
转到设置 -> 系统 -> 开发人员选项(取决于手机,开发人员选项可能位于不同的位置)
在“应用”的“后台进程限制”中,选择“无后台进程”
要模拟系统启动的进程死亡,请在启动应用后:
1、按下主屏幕按钮
2、启动其他应用,然后按主屏幕按钮
您的应用程序进程将被终止。
PROCESS ENDED (8227) for package com.example.understandlifecyclesdemo
您还可以使用 Android Studio 终端检查流程,并确保您的应用包不再显示在流程列表中。
用户启动的进程死亡
模拟用户启动的进程死亡的最简单方法是执行用户可以执行的操作。
1. 手动关闭应用程序
- 按下主屏幕按钮
- 按方形按钮
- 关闭应用程序 - 按 X 或全部清除
2.adb shell am强制停止
另一种方法是在终端中使用命令。即使你的应用位于前台,你也可以运行此命令。它只会直接杀死你的应用程序。
android {
compileSdk 32
defaultConfig {
applicationId "com.example.understandlifecyclesdemo"
/*...*/
}
}
因此,根据上面的名称,完整命令如下所示。
adb shell am force-stop com.example.understandlifecyclesdemo
进程死亡恢复
在使用保存UI状态时,我注意到对于用户启动的进程死亡恢复,Android操作系统不会恢复UI状态,即使您在杀死应用程序之前将数据保存到捆绑包中也是如此。
对于系统启动的进程死亡恢复,如果进程死亡之前有正在保存的数据,Android 操作系统将恢复 UI 状态。具体来说,是调用的。
这类似于在视图模型中。对于用户启动的进程死亡恢复,检索到的值为 null,即使您在此之前保存数据也是如此。对于系统启动的进程死亡恢复,检索到的值是以前保存的值。