5

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

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

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

为什么?

LogCat 显示这些应用程序onDestroy() 肯定被调用了。

从该列表中真正删除应用程序需要什么?

killProcess()我唯一的办法吗?

4

1 回答 1

5

对于许多人来说,这是一个令人困惑的领域,正如可以在另一个线程中看到的那样。

事实上,即使是来自 O'Reilly 等受人尊敬的来源的这本书也可以通过暗示Destroyed状态可能意味着“被杀死”并且可以从其中一个onDestroy()进程被杀死来达到这一点,从而混淆问题:

在此处输入图像描述

恕我直言,那个 O'Reilly 状态图有缺陷,并没有像“官方”图那样反映系统的全部行为:

在此处输入图像描述

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

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

于 2012-08-08T13:07:00.470 回答