getRunningAppProcesses()返回已销毁的进程

ate*_*iob 5 android activity-lifecycle android-activity

我使用以下代码片段来检查我finish()编辑的应用程序是否确实不再运行:

ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> procList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc : procList)
    Log.d(TAG, proc.processName);
}
Run Code Online (Sandbox Code Playgroud)

令我沮丧的是,我finish()编辑的一些应用程序(在他们的Activity.onCreate()中,甚至在他们有机会发布任何东西之前)仍然列在那里.

为什么?

LogCat显示这些应用程序onDestroy() 肯定被称为.

如何从该列表中真正删除应用程序?

killProcess()我唯一的追索权吗?

And*_*Eve 5

对于许多人来说,这是一个混乱的领域,正如在这个其他主题中可以看到的那样.

实际上,即使是来自像O'Reilly这样受人尊敬的来源的这本书,也可以通过暗示"被毁坏的"状态可能意味着"被杀"并且可以从任何一个onDestroy()或被杀死的过程到达来混淆事物:

在此输入图像描述

恕我直言,O'Reilly状态图存在缺陷,并未像"官方"图所示那样反映系统的完整行为:

在此输入图像描述

分析这个图表,可以得出结论, onDestroy()永远不会自动导致App进程被杀死.我相信这回答了你的第一个问题.

至于你的第二个问题,答案是肯定的:如果你真的想彻底杀死你的应用程序的过程(你为什么要这样做?),那么你唯一的办法是killProcess().