0

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

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 不在它们应该在的位置)。请注意,此应用程序也是我自己编写的,通常可以正常工作。

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

感谢您的回复!

4

1 回答 1

4

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

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

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

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

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

于 2012-05-10T07:08:48.970 回答