How to kill all running applications in android?

后端 未结 4 541
情深已故
情深已故 2020-11-30 01:24

I want to kill all running applications in android .so for this task , i implemented following code. But it is not working .App still remains in running.

Act         


        
相关标签:
4条回答
  • 2020-11-30 01:58

    You have another possibility if the device is rooted (has superuser rights).

    You can invoke an external process that would use the su rights. But note that it's probably a bad design as Android OS should be the only one to kill processes.

    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!            
    }
    
    0 讨论(0)
  • 2020-11-30 02:02

    Reflect to force stop

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

    You should add this system permission:

    android.permission.FORCE_STOP_PACKAGES

    0 讨论(0)
  • 2020-11-30 02:06

    According to doc enter link description here

    Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app

    I test it, and it only kill process hosted my App.

    0 讨论(0)
  • 2020-11-30 02:11
    • You can use Process.killProcess(int pid) to kill processes that have the same UID with your App.
    • You can use ActivityManager.killBackgroundProcesses(String packageName),with KILL_BACKGROUND_PROCESSES permission in your manifest(for API >= 8) or ActivityManager.restartPackage (String packageName)(for API < 8) to kill specified process,except of forground process.

    So if you would to kill all other processes when your program is foreground process,you would to use ActivityManager.killBackgroundProcesses or ActivityManager.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);
       }      
    

    In above snippet code,each process will be killed unless it be process of your App or system process.
    References:
    How to close all active applications from my Android app?
    How do task killers work?

    0 讨论(0)
提交回复
热议问题