某些应用仍然可以获取当前的应用流程并将其杀死?

时间:2017-03-22 13:50:36

标签: android process

背景

在过去,我发现了下一个杀死应用程序后台进程的方法,给出了它的包名:

public static boolean killApp(final Context context, final String packageName) {
    final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    final List<ActivityManager.RunningAppProcessInfo> pids = am.getRunningAppProcesses();
    for (int i = 0; i < pids.size(); i++) {
        final ActivityManager.RunningAppProcessInfo info = pids.get(i);
        if (info.processName.equals(packageName)) {
            android.os.Process.killProcess(info.pid);
            if (new File("/system/bin/kill").exists()) {
                InputStream inputStream = null;
                try {
                    inputStream = Runtime.getRuntime().exec("kill -9 " + info.pid).getInputStream();
                    final byte[] buffer = new byte[100];
                    inputStream.read(buffer);
                } catch (final IOException e) {
                }
                StreamsUtil.closeStream(inputStream);
            }
            am.killBackgroundProcesses(packageName);
            return true;
        }
    }
    am.killBackgroundProcesses(packageName);
    return false;
}

问题

自从特定的Android版本(5.1)以来,获取正在运行的进程列表的函数只返回当前应用程序的进程,因此使用它是没用的。

我发现了什么

  • Play商店中的大多数应用确实无法显示流程列表,而是仅显示当前应用的流程或最多服务列表。

  • 似乎有些应用程序仍设法显示后台应用程序进程,甚至可以杀死它们。作为一个例子,我发现AVG的应用程序能够这样做,here

    在他们可以做之前,他们会告诉用户启用应用的使用统计设置,我记得用它来检查应用发布时间的一般信息。

  • 另一个成功杀死后台进程但未经任何用户确认的应用程序是“fast task killer”。它还显示了被杀死的所有进程的祝酒词。我可能错了,但似乎它总是相同数量的任务。

  • 我还认为有一种相对简单的方法可以使用“ps”函数获取进程列表,但前提是设备是root用户(否则它只返回当前应用程序的进程)。

  • 有一个带库的临时解决方案,找到here(已发布here),但这似乎不适用于Android 7.1.2,而且很可能在之前的版本上有效。

问题

应用如何获取具有后台进程的应用列表,以及它们如何杀死它们?

是否可以在不使用UsageStatsManager课程的情况下这样做?

0 个答案:

没有答案