Android:杀死进程并关闭应用程序

时间:2012-05-10 06:51:18

标签: android process

我正在开发一个简单的任务管理器,它允许用户终止正在运行的进程并终止应用程序。我正在使用以下方式获取正在运行的进程列表:

List<RunningAppProcessInfo> procInfo = activityManager.getRunningAppProcesses();

只需点击一下按钮,我就想以任何方式杀死所有不重要或不重要的正在运行的进程。为此,我使用:

ArrayList<String> packages = new ArrayList<String>();
for (int i = 0; i < procInfo.size(); i++) {
    String process = procInfo.get(i).processName;
    if (!packages.contains(process)) {
            packages.add(process);
    }
}

这将为我提供所有正在运行的进程的名称,现在我应该使用它们的重要性代码以某种方式过滤它们:

int importance = procInfo.get(i).importance

但我不确定如何。我应该继续跑什么,什么是安全的杀人?我正在使用

applicationManager.killBackgroundProcesses(process);

杀死我的进程。我的下一个问题是,这是杀死进程的最佳方法吗?因为当我这样做而且我再次打开所有进程被杀死的应用程序之一时,我发现自己不在其主要活动中但在我离开它的地方,所以我认为应用程序从未终止,即使它的所有进程都被杀死了。此外,我在相当荒凉的状态下使用该应用程序(缺少ImageViews和Buttons,TextViews不应该是它们应该在的地方)。请注意,此应用程序也是由我自己编写的,通常它完全正常。

我的最后一个问题是,当杀死进程的这个问题得到解决时,我还希望终止所选的应用程序。如何获取正在运行的应用程序列表?我正在考虑获取正在运行的进程列表,而不是以某种方式从该列表中获取应用程序。之后,通过终止所有进程来终止所选应用程序。但是我不认为这是最好的方法,因为当我杀死所有进程时它显然没有用。

感谢您的回复!

1 个答案:

答案 0 :(得分:4)

在Android中杀死应用通常被视为一个坏主意。这是因为Android OS旨在处理所有任务管理。通常,当一个项目被列为在Android OS上运行时,它甚至不会消耗资源。如果系统确实需要更多资源,它将正确关闭应用程序。如果应用程序未正确关闭,即通过任务杀手,它可能会产生许多不良副作用。

此外,仅仅因为应用程序“正在运行”并不意味着它正在运行一个进程。如果您查看ActivityManager的文档,就会说明这一点。

  

您可以检索有关系统中当前“正在运行”的特定任务的信息。请注意,正在运行的任务并不意味着给定任务实际上有一个正在运行的进程;它只是意味着用户已经转到它并且从未关闭它,但是当前系统可能已经杀死了它的进程并且仅保持其最后状态以便在用户返回时重新启动它

killBackgroundProcesses()会像Android操作系统那样杀死一个进程(当它需要更多内存时),因此它可能会保留其最后一个状态,因为它认为它已被杀死,因为系统需要更多资源。从而导致系统相信用户可能想要返回应用程序(为什么它保持其最后状态)。

无论如何,在你阅读了上述内容之后仍然希望编写一个任务杀手,你可能会发现检查开源任务杀手是有益的。代码可以在这里看到:http://code.google.com/p/freetaskmanager/source/browse/