2011-09-13 13 views
13

Quiero matar a todas las aplicaciones en ejecución en android .so para esta tarea, implementé el siguiente código. Pero no está funcionando .App aún permanece en ejecución.¿Cómo matar todas las aplicaciones en ejecución en Android?

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

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

Entonces, ¿dónde me equivoco en el código? ¿Hay alguna ayuda?

+0

Déjeme decirle que he probado en AVD no en el dispositivo .So ¿hay alguna manera que sólo se ejecuta en el dispositivo real? –

Respuesta

18
  • Puede utilizar Process.killProcess(int pid) para matar los procesos que tienen el mismo UID con su aplicación.
  • Puede usar ActivityManager.killBackgroundProcesses(String packageName), con KILL_BACKGROUND_PROCESSES permiso en su manifiesto (para API> = 8) o ActivityManager.restartPackage (String packageName) (para API < 8) para matar el proceso especificado, excepto el proceso forground.

Así que si lo haría para matar a todos los demás procesos cuando el programa es proceso en primer plano, que le permite utilizar ActivityManager.killBackgroundProcesses o 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); 
    }  

En el fragmento de código anterior, cada proceso se mató a menos que sea proceso de su aplicación o proceso del sistema.
Referencias:
How to close all active applications from my Android app?
How do task killers work?

+0

Muchas gracias –

+0

@Nandlal Virani Ok! por favor mira mis ediciones – hasanghaforian

+0

No entiendo qué línea -------- si ((packageInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) continúa; hace..!! ¿podría explicar –

1

Según doc enter link description here

Tenga en cuenta que, aunque esta API nos permite solicitamos para matar cualquier proceso basado en su PID, pero el núcleo sigue impondrá restricciones estándar en el que los PID que son realmente capaces de matar. Normalmente, esto significa que sólo el proceso que se ejecuta de la persona que llama paquetes/solicitud y cualquier procesos adicionales creados por esa aplicación

lo prueba, y sólo matar proceso acogió mi aplicación.

+0

¿Entonces es imposible matar a otros que ejecutan aplicaciones? –

+1

Hago una pequeña búsqueda acerca de cómo matar aplicaciones externas. Pero, nada útil encontrar. Por otro lado, tenemos muchas aplicaciones de administradores de tareas que pueden eliminar cualquier proceso externo.Entonces, esto es posible, pero desafortunadamente aún no sé cómo. – Bandzio

+0

ok, thanxdxfdsfssssssss –

5

tiene otra posibilidad si el dispositivo tiene sus raíces (tiene derechos de superusuario).

puede invocar un proceso externo que utilizaría los derechos SU. Pero tenga en cuenta que probablemente sea un mal diseño ya que el sistema operativo Android debería ser el único que elimine los procesos.

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

¿Cómo puedo implementarlo? solo funcionará en un dispositivo real? –

+0

Lo probé y la aplicación sigue ejecutándose pero mató –

+0

Tu teléfono tiene que rootear – Overblade

0

reflejan forzar la detención de

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

Usted debe agregar este permiso del sistema:

android.permission.FORCE_STOP_PACKAGES

+0

android studio advirtiendo que solo será concedido a las aplicaciones del sistema. –

Cuestiones relacionadas