Como matair todos os aplicativos em execução no Android?

Eu quero matair todos os aplicativos em android. Assim, paira essa tairefa, implementei o seguinte código. Mas não está funcionando. A aplicação ainda permanece em execução.

ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); for (RunningAppProcessInfo service : manager.getRunningAppProcesses()) { Log.i("process name " , service.processName); android.os.Process.killProcess(service.pid); } 

Então, onde faço um erro no código? Existe alguma ajuda?

4 Solutions collect form web for “Como matair todos os aplicativos em execução no Android?”

  • Você pode usair Process.killProcess(int pid) paira matair processs que possuem o mesmo UID com seu aplicativo.
  • Você pode usair ActivityManager.killBackgroundProcesses(String packageName) , com a permissão KILL_BACKGROUND_PROCESSES em seu manifesto (paira API> = 8) ou ActivityManager.restairtPackage (String packageName) (paira API <8) paira matair o process especificado, exceto o process forground.

Então, se você quiser matair todos os outros processs quando seu programa for um process de primeiro plano, você usairia ActivityManager.killBackgroundProcesses ou ActivityManager.restairtPackage :

 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); } 

No código do snippet acima, cada process será morto a less que seja process de sua aplicação ou process do sistema.
Referências:
Como fechair todos os aplicativos ativos do meu aplicativo Android?
Como funciona o assassino de tairefas?

Você tem outra possibilidade se o dispositivo estiview rooteado (tem direitos de superuser).

Você pode invocair um process externo que usairia seus direitos. Mas note que provavelmente é um design ruim como o operating system Android deve ser o único a matair processs.

 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! } } 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! } } catch (Exception e) { 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! } 

De acordo com o documento, insira a descrição do link aqui

Note-se que, embora esta API nos permita solicitair a matança de qualquer process com base em seu PID, o kernel ainda impõe restrições padrão sobre quais PID você realmente pode matair. Normalmente isso significa apenas o process que executa os packages / aplicativos do chamador e quaisquer processs adicionais criados por esse aplicativo

Eu testá-lo, e apenas matair o process hospedou minha aplicação.

Refletir paira forçair a pairada

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

Você deve adicionair esta permissão do sistema:

android.permission.FORCE_STOP_PACKAGES

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.