Подтвердить что ты не робот

Как убить все запущенные приложения в 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);
    }

Итак, где я ошибаюсь в коде? Есть ли помощь?

4b9b3361

Ответ 1

  • Вы можете использовать Process.killProcess(int pid) для уничтожения процессов с тем же UID с вашим приложением.
  • Вы можете использовать ActivityManager.killBackgroundProcesses(String packageName), с разрешением KILL_BACKGROUND_PROCESSES в вашем манифесте (для API >= 8) или ActivityManager.restartPackage (String packageName) (для API < 8), чтобы убить указанный процесс, за исключением наземного процесса.

Итак, если вы хотите убить все остальные процессы, когда ваша программа является передним планом, вы должны использовать ActivityManager.killBackgroundProcesses или 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);
   }      

В приведенном выше коде фрагмента каждый процесс будет уничтожен, если это не будет процессом вашего приложения или системного процесса.
Ссылки:
Как закрыть все активные приложения из моего Android-приложения? Как работают убийцы задач?

Ответ 2

У вас есть другая возможность, если устройство коренится (имеет права суперпользователя).

Вы можете вызвать внешний процесс, который будет использовать права su. Но обратите внимание, что это, вероятно, плохой дизайн, поскольку Android-ОС должна быть единственной, кто может убивать процессы.

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!            
}

Ответ 3

В соответствии с doc введите ссылку здесь

Обратите внимание, что хотя этот API позволяет нам запросить уничтожение любого процесса основанный на его PID, ядро ​​по-прежнему будет устанавливать стандартные ограничения на которых PID вы действительно можете убить. Обычно это означает только процесс, выполняющий пакеты/приложение вызывающего абонента и любые дополнительные процессы, созданные этим приложением

Я тестирую его, и он только убивает процесс, в котором находится мое приложение.

Ответ 4

Отразить принудительную остановку

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