【问题标题】:How to kill an 3rd-app programmatically?如何以编程方式杀死第三个应用程序?
【发布时间】:2013-08-12 16:53:24
【问题描述】:

如何在android中杀死一个应用程序?

killPackageProcesses(services.get(i).baseActivity.getPackageName());

这是函数killPackageProcesses

public void killPackageProcesses(String packagename) {
    int pid = 0;
    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> pids = am
            .getRunningAppProcesses();
    for (int i = 0; i < pids.size(); i++) {
        ActivityManager.RunningAppProcessInfo info = pids.get(i);
        if (info.processName.equalsIgnoreCase(packagename)) {
            pid = info.pid;
        }
    }
    android.os.Process.killProcess(pid);

}

它不起作用。它如何适用于其他应用程序? 权限写好了。

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

【问题讨论】:

  • 当你说它“不起作用”时,你是什么意思?有错误吗?结果是否与预期不同?解释。您的代码还需要更多上下文。 killPackageProcesses() 是什么? services? i?
  • @Michelle 对不起。我刚刚编辑了帖子。

标签: java android process task


【解决方案1】:

您不能只杀死 Android 中的任何进程。来自the documentation on Process

请注意,尽管此 API 允许我们请求终止任何进程 基于它的PID,内核仍然会施加标准限制 您实际上可以杀死哪些PID。通常这仅意味着 运行调用者的包/应用程序的进程和任何 该应用程序创建的其他进程;共享一个共同点的包 UID 也将能够杀死彼此的进程。

另请注意,您在清单中请求的权限并不像您认为的那样起作用。根据documentationKILL_BACKGROUND_PROCESS

允许应用程序调用 killBackgroundProcesses(String)。

【讨论】:

  • Android 在上述方法之后发送一个终止进程的信号。但是应用程序不会立即关闭,对吗?
  • 在调用killProcess() 时,您的应用程序将请求终止该进程,但内核不会这样做,除非该进程是您自己的应用程序的一部分。在 Android 上杀死其他人的应用程序并不是你应该做的事情。
  • 我正在编写一个简单的任务管理器,“杀死进程”如何为其他应用程序工作?据我了解,我只能请求杀死一个进程,Android可以允许/拒绝它吗?
  • “如何编写任务管理器”的答案是“不要”。 Android 很好地处理了它的内存和应用程序生命周期,并且有明显的安全原因说明为什么系统不应该让你任意杀死其他应用程序 - 这很容易从任务管理器变成恶意软件。
  • 我已经阅读了很多关于尝试在您自己的应用程序中“停止”另一个 3rd 方应用程序的主题。它看起来像是不可能的事情(除非你已经扎根)。另一方面,所有安卓版本都允许用户手动停止任何服务或应用程序:设置>应用程序>运行应用程序>停止。那么为什么没有程序化的方式呢? Android 真的是开源程序吗?
猜你喜欢
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-17
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多