Как убить все запущенные приложения в 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);
}
Итак, где я ошибаюсь в коде?
Есть ли помощь?
Ответы
Ответ 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