¿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.

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 ?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.