¿Cómo algunas aplicaciones todavía pueden obtener los procesos actuales de las aplicaciones y matarlos?
Fondo
En el pasado, he encontrado el siguiente método de matar los procesos de fondo de una aplicación, dado su nombre de paquete:
public static boolean killApp(final Context context, final String packageName) { final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); final List<ActivityManager.RunningAppProcessInfo> pids = am.getRunningAppProcesses(); for (int i = 0; i < pids.size(); i++) { final ActivityManager.RunningAppProcessInfo info = pids.get(i); if (info.processName.equals(packageName)) { android.os.Process.killProcess(info.pid); if (new File("/system/bin/kill").exists()) { InputStream inputStream = null; try { inputStream = Runtime.getRuntime().exec("kill -9 " + info.pid).getInputStream(); final byte[] buffer = new byte[100]; inputStream.read(buffer); } catch (final IOException e) { } StreamsUtil.closeStream(inputStream); } am.killBackgroundProcesses(packageName); return true; } } am.killBackgroundProcesses(packageName); return false; }
El problema
Desde una versión específica de Android (5.1), la función para obtener la lista de procesos en ejecución sólo devuelve los procesos de la aplicación actual, por lo que es bastante inútil usarla.
- ¿Cómo puedo abrir un Fragmento de Android en un nuevo proceso?
- ¿Cómo puede una aplicación de Android tener más de un proceso?
- Java.lang.Thread.setPriority vs android.os.Process.setThreadPriority
- Apertura de la cámara en un proceso diferente
- Cada actividad en Android es un proceso o una aplicación es un proceso
Lo que he encontrado
-
La mayoría de las aplicaciones de Play Store no muestran una lista de procesos y, en su lugar, muestran sólo el proceso de la aplicación actual o una lista de servicios como máximo.
-
Parece que algunas aplicaciones todavía logran mostrar procesos de aplicaciones de fondo e incluso ser capaces de matarlos. Como ejemplo, he encontrado la aplicación de AVG que es capaz de hacerlo, aquí .
Antes de que puedan hacerlo, le dicen al usuario que habilite la configuración de stats de uso para la aplicación, que recuerdo de usar para comprobar la información general del tiempo de lanzamiento de las aplicaciones.
-
Otra aplicación que tuvo éxito matando procesos de fondo, sin embargo, sin ninguna confirmación de usuario, es " asesino de tareas rápidas ". También muestra un brindis de todos los procesos que se matan. Yo podría estar equivocado, pero parece que siempre es el mismo número de tareas.
-
También creo que hay una manera relativamente fácil de obtener la lista de procesos utilizando la función "ps", pero sólo si el dispositivo está enraizado (de lo contrario, volverá sólo los procesos de la aplicación actual).
-
Había una solución temporal con una biblioteca, encontrada aquí (publicada aquí ), pero esto no parece trabajar en Android 7.1.2, y lo más probablemente en versiones anteriores.
La pregunta
¿Cómo obtienen las aplicaciones la lista de aplicaciones que tienen procesos en segundo plano y cómo los eliminan?
¿Es posible hacerlo sin usar la clase UsageStatsManager ?
- Obtener el PID de un proceso para matarlo, sin saber su nombre completo
- Cómo matar a mi propia actividad - la manera dura
- ¿Cuáles son los pros y los contras de usar múltiples procesos dentro de la aplicación Android
- ¿Las aplicaciones que utilizan varios procesos comparten una instancia de Dalvik?
- Ejecución de un comando de shell para copiar archivos de la aplicación Android
- El nombre de aplicación de PackageManager siempre es nulo
- Obtener (real) proceso de primer plano mediante activityManager.getRunningAppProcesses ()
- La notificación sigue en la barra después de matar al servicio
- Schedulers.immediate () no funciona con las pruebas de gradle de la línea de comandos
- Tiempo de la API de Snapshot de conciencia