【问题标题】:getRunningAppProcesses() returns processes that were destroyedgetRunningAppProcesses() 返回被销毁的进程
【发布时间】:2012-08-07 23:50:11
【问题描述】:

我正在使用以下 sn-p 来检查我 finish()ed 的应用程序是否确实不再运行:

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

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

为什么?

LogCat 显示这些应用程序的 onDestroy()确实被调用了。

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

killProcess()是我唯一的办法吗?

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案1】:

    这对许多人来说是一个困惑的领域,如 this other thread 所示。

    事实上,即使来自 O'Reilly 等受人尊敬的来源的 this book 也可能会混淆问题,因为它暗示 Destroyed 状态可能意味着“被杀死”并且可以从 @987654326 到达@ 或进程被杀死

    恕我直言,O'Reilly 状态图存在缺陷,不能像“官方”图那样反映系统的全部行为:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多