如何杀死android中所有正在运行的应用程序?

时间:2011-09-13 06:27:25

标签: android

我想杀死android .so中所有正在运行的应用程序,为此任务,我实现了以下代码。但它没有用.App仍然在运行。

ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningAppProcessInfo service : manager.getRunningAppProcesses()) {
    Log.i("process name " , service.processName);

    android.os.Process.killProcess(service.pid);
    }

那么我在代码中犯了什么错误? 有什么帮助吗?

4 个答案:

答案 0 :(得分:21)

  • 您可以使用Process.killProcess(int pid)来杀死与您的应用具有相同UID的流程。
  • 您可以在清单中使用ActivityManager.killBackgroundProcesses(String packageName) KILL_BACKGROUND_PROCESSES权限(对于API> = 8)或ActivityManager.restartPackage (String packageName)(对于API< 8)来杀死指定的进程,但地面过程。

因此,如果您在程序处于前台进程时要杀死所有其他进程,则可以使用ActivityManager.killBackgroundProcessesActivityManager.restartPackage

List<ApplicationInfo> packages;
    PackageManager pm;
    pm = getPackageManager();
    //get a list of installed apps.
    packages = pm.getInstalledApplications(0);

   ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
   String myPackage = getApplicationContext().getPackageName();
   for (ApplicationInfo packageInfo : packages) {
        if((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM)==1)continue;
        if(packageInfo.packageName.equals(myPackage)) continue;
        mActivityManager.killBackgroundProcesses(packageInfo.packageName);
   }      

在上面的代码段代码中,除非是您的应用程序或系统进程的处理,否则每个进程都将被终止 参考文献:
How to close all active applications from my Android app?
How do task killers work?

答案 1 :(得分:5)

如果设备已植根(具有超级用户权限),您还有另一种可能性。

您可以调用将使用su权限的外部进程。但请注意,这可能是一个糟糕的设计,因为Android OS应该是唯一一个杀死进程的人。

try {
   Process rootProcess = Runtime.getRuntime().exec(new String[] { "su" });

   String command = "kill - 9 <pid>";

   BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(rootProcess.getOutputStream()), 2048);
   try {
      bw.write(command);
      bw.newLine();
      bw.flush();
   } catch (IOException e) {
    // Handle error
   }
} catch (Exception e) {
   e.printStackTrace();
   // Device not rooted!            
}

答案 2 :(得分:1)

根据文件enter link description here

  

请注意,尽管此API允许我们请求终止任何进程   基于其PID,内核仍然会施加标准限制   你实际上能够杀死哪些PID。通常这只意味着   运行调用者的包/应用程序的过程   该应用程序创建的其他流程

我测试它,它只会杀死托管我的App的进程。

答案 3 :(得分:0)

反思强制停止

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); Method method = Class.forName("android.app.ActivityManager").getMethod("forceStopPackage", String.class); method.invoke(am, pkgName);

您应该添加此系统权限:

  

android.permission.FORCE_STOP_PACKAGES