Las nuevas limitaciones de las aplicaciones en segundo plano de Android 12 podrían ser un gran dolor de cabeza para los usuarios avanzados

Las nuevas limitaciones de las aplicaciones en segundo plano de Android 12 podrían ser un gran dolor de cabeza para los usuarios avanzados que usan aplicaciones como Termux y tal vez incluso Tasker.

androide 12 ha introducido muchos cambios, aunque no todos están realmente orientados al usuario. Características como el enorme Material que rediseñas obviamente se te ponen en la cara y es difícil pasarlas por alto, pero algo como Llave de coche digital Es posible que sea más fácil pasar por alto el apoyo. Sin embargo, un cambio que podría incluso estar completamente indocumentado causará estragos en aplicaciones como Termux, y es la introducción de un asesino de procesos en segundo plano bastante agresivo.

Por contexto, Termux es un emulador de terminal de Linux que puede obtener en Android y la administración de paquetes de Termux. El sistema es muy parecido a la herramienta de paquete avanzado (APT) de Debian en el sentido de que puede buscar, instalar y desinstalar con el dominio apto. Termux instala solo algunos paquetes básicos listos para usar, para reducir el tamaño del APK en Play Store, pero le permite 

instalar cualquier paquete adicional que deseas. La gente suele utilizar Termux para convertir teléfonos inteligentes más antiguos en miniservidores, o utilizarlo para ejecutar otros programas que normalmente no están destinados a teléfonos inteligentes. Un uso común es incluso configurar youtube-dl de forma nativa, ya que puede ejecutar scripts de Python usando Termux en su teléfono inteligente.

Sin embargo, en Android 12, fue descubierto que existe un mecanismo para monitorear los procesos secundarios bifurcados iniciados por las aplicaciones y los elimina si consumen demasiada CPU si la aplicación está en segundo plano (a través de Mishaal Rahman) Fue presentado. También limita la cantidad de procesos secundarios que los procesos principales pueden generar a 32, lo que limita en gran medida la cantidad de operaciones que una aplicación puede completar en segundo plano. Este límite de 32 procesos secundarios en realidad se aplica a todo el sistema, no solo por aplicación, lo que significa que otras aplicaciones con procesos secundarios también contribuirán a ese límite. Probé en Google Pixel 6 Pro y puedo confirmar que el FantasmaProcesoAsesino existe y potencialmente puede causar estragos en Termux.

Phantom Process Killer de Android 12 elimina los procesos en segundo plano

Android 12 introdujo un par de restricciones en los procesos en segundo plano; La primera es que los procesos secundarios de las aplicaciones que consumen demasiada CPU en segundo plano se eliminarán si el proceso principal también está en segundo plano. La segunda restricción introducida es un límite en la cantidad de procesos secundarios que pueden estar activos en un momento dado. Desde el cometer historial, parecería que Google estaba intentando tomar medidas drásticas contra los procesos en segundo plano no autorizados.

"Las aplicaciones podrían usar Runtime.exec() para generar procesos secundarios y el marco no tendrá idea de su ciclo de vida. Ahora realice un seguimiento de esos procesos cada vez que los encontremos; actualmente, durante el muestreo de estadísticas de la CPU, podrían detectarse. Si consume demasiada CPU mientras el proceso de la aplicación principal también está en segundo plano, elimínelo. De forma predeterminada, permitimos hasta 32 procesos de este tipo; el proceso con el peor puntaje de adj de sus padres será eliminado si hay demasiados."

Por supuesto, los teléfonos inteligentes Android ya son conocidos por eliminar aplicaciones en segundo plano. Casi todos los principales fabricantes de equipos originales lo practican de alguna manera, y empresas como OnePlus, Samsung y Xiaomi están considerados entre los peores. Si bien AOSP tiene algunas restricciones de aplicaciones en segundo plano, es típico que los fabricantes creen sus propias restricciones además de AOSP. Sin embargo, estas son limitaciones bastante estrictas para los usuarios avanzados y fomentan comportamientos que los usuarios avanzados han estado en contra durante mucho tiempo. Tal vez aumente la duración de la batería a largo plazo, pero aparentemente tampoco hay forma de desactivarlo.

Activación del asesino de procesos fantasma de Android 12

Como dice el compromiso, se permiten 32 procesos de este tipo y lo verifiqué en mi Google Pixel 6 Pro con el siguiente comando.

adb shell "/system/bin/dumpsys activity settings"

En el resultado de este comando, hay una constante llamada "max_phantom_processes" con un valor de 32. En este contexto, el sistema Android considera que un "proceso fantasma" es un proceso secundario que se ejecuta en segundo plano. Si tiene un dispositivo Android 12, puede usar Termux para generar más de 32 procesos secundarios mediante crear un script bash en algún lugar de su almacenamiento que contenga el siguiente código y ejecutarlo (créditos para agnóstico-apolo en GitHub, un desarrollador involucrado con Termux):

for i in $(seq 40); do
sha256sum /dev/zero &
done

Para ejecutarlo, en Termux navegue hasta la carpeta donde guardó el script y escriba lo siguiente:

shfilename.sh

Si su teléfono comienza a sentir retrasos, eso significa que está funcionando. El código anterior genera 40 operaciones sha256sum en segundo plano (indicadas por el signo comercial) tomando el /dev/zero archivo como entrada. sha256sum proporcionará el hash SHA-256 de cualquier archivo que se proporcione como entrada. La razón /dev/zero se utiliza es que es un archivo de longitud infinita que contiene valores nulos mientras se lee, lo que significa que el La operación sha256sum nunca llegará al final del archivo, lo que sirve como una buena prueba de esfuerzo para garantizar un fondo continuo. operaciones.

Después de unos segundos a un minuto, es posible que aparezca lo siguiente:

La "señal 9" es una señal enviada al proceso que lo obliga a cerrarse, y esta señal la envía el programador de Linux. La razón por la que aparece el mensaje es que el terminal bash también es técnicamente un proceso hijo de Termux, y Android 12 termina matando el terminal bash en la demostración anterior. En la salida de logcat, puede ver lo siguiente:

11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {414579a 27434:27269:top/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237} died
11-02 13:01:52.512 1444 1764 I ActivityManager: Process PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340} died
11-02 13:01:52.517 1444 1764 I ActivityManager: Process PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340} died
11-02 13:01:52.519 1444 1764 I ActivityManager: Process PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340} died
11-02 13:01:52.532 1444 1764 I ActivityManager: Process PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340} died
11-02 13:01:52.545 1444 1764 I ActivityManager: Process PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340} died

La línea importante es la que menciona que el proceso "bash" fue recortado y luego murió, y es por eso que Termux deja de funcionar. Si bien no estoy seguro de qué es "nightwatch.txt", una búsqueda superficial en Google parece sugerir que está relacionado con Facebook y Facebook Messenger, dos aplicaciones que tengo instaladas. Probé esto con la batería adaptativa apagada y me aseguré de que tampoco se aplicaran optimizaciones de batería a Termux.

Una vez que haya terminado las pruebas, es probable que algunas de las operaciones sha256sum continúen en el fondo todavía (y presionar Enter forzará el cierre de Termux), así que vuelva a abrir Termux y escriba el siguiente:

killall sha256sum

Si bien esta limitación tiene sentido para algunas aplicaciones, las aplicaciones que los usuarios avanzados podrían estar más dispuestos a usar (como Termux) se verán afectadas. Esto también puede tener un efecto en otras aplicaciones que también utilizan los usuarios avanzados, como Tasker. Es una limitación que no parece posible superar todavía e introduce aún más limitaciones en las aplicaciones en segundo plano además de todas las demás restricciones de propiedad que imponen los fabricantes. En el hilo de problemas en curso de GitHub, agnostic-apollo menciona lo siguiente con respecto a un logcat que se les envió por correo electrónico:

"Los 32 logcat PhantomProcessRecord rastreados pertenecen a com.wsandroid.suite y bash de termux fue uno de los procesos que se eliminó. Como se mencionó anteriormente, el límite de 32 procesos es para todas las aplicaciones combinadas".

Curiosamente, realicé las mismas pruebas en un Xiaomi 11T Pro con Android 11 y confirmé que el comportamiento no existe. en ese dispositivo en particular en esa configuración, a pesar de que los dispositivos Xiaomi son conocidos por sus aplicaciones en segundo plano limitaciones. Esta es, curiosamente, una de las políticas de administración de aplicaciones en segundo plano más estrictas introducidas en cualquier teléfono inteligente Android, ya que no hay forma de evitarla. Incluso en dispositivos Xiaomi y dispositivos OnePlus, es posible desactivar mayoría de ello, y para algunas personas, deshabilitar todas las optimizaciones de batería en esos dispositivos es suficiente para estar contentos. El asesino de procesos fantasma, por el contrario, ni siquiera se puede desactivar.

Si confía en Termux para muchas operaciones en el dispositivo que son intensivas con muchos procesos en segundo plano, podría valer la pena posponer la actualización por ahora hasta que haya más información. Si no eres un usuario avanzado, probablemente esto no sea algo de lo que realmente debas preocuparte.