10 votos

¿Hay alguna forma (con Root?) de evitar que el task killer de Android mate ciertas aplicaciones?

Me gustaría que una aplicación del navegador (FireFox) no fuera asesinada cada cierto tiempo por el task killer del sistema, ya que me gustaría utilizar ciertas aplicaciones de una sola página que contienen algunos datos y no se cargan muy rápidamente. ¿Hay alguna forma de solucionar esto, incluso si se requiere Root?

Hace algún tiempo, he actualizado mi dispositivo de un 1 GB de RAM a otro, 3 GB de RAM y todo fue bien (el navegador dejó de matarse en absoluto). Pero después de una actualización del sistema en enero de 2016, las cosas se pusieron aún peor, ahora FireFox por lo general se mata incluso después de un reloj de alarma sonó o abrí una aplicación de la cámara. Este es un problema importante para mí, así que agradezco cualquier ayuda sobre esto.

PS yeap, he probado AjustesBateríaOptimización de la batería donde tanto añadí FF a las excepciones (no ayudó) y activé la optimización de la batería en absoluto (no ayudó también).

11voto

xavier_fakerat Puntos 1

Tl;dr

Es posible con Root, puedes ajustar oom_adj para evitar que las aplicaciones sean eliminadas, o bien forzar a la aplicación objetivo a permanecer en la memoria "bloqueándola" o cambiar algunos ajustes relacionados responsables de la eliminación de aplicaciones en condiciones de poca memoria.


Antecedentes: Gestión de la RAM en Android

Android utiliza una forma diferente de manejar los procesos. En lugar de matar cada proceso después de que su actividad terminó, los procesos se mantienen hasta que el sistema necesite más memoria. La idea es dar mejoras de velocidad si se vuelve a iniciar esa actividad. Pero, ¿cómo/cuándo mata Android un proceso si necesita más memoria y qué proceso matar primero?

Esto es gestionado por el controlador LMK (Low Memory Killer) de Android. Usted ya sabes que cada aplicación/proceso en Android tiene asignado un oom_adj valor, que indica la probabilidad de que se mate cuando una situación de falta de memoria (OOM). Cuanto más alto sea su valor, mayor será la mayor es la probabilidad de que sea eliminado. El rango válido es -17 a +15 . (si en el -17 rango significa que no se matará). De acuerdo con esto, hay hay seis grupos (grupos OOM), en los que las aplicaciones/procesos se se clasifican:

  1. Aplicación en primer plano
  2. Aplicación visible
  3. Servidor secundario
  4. Aplicación oculta
  5. Proveedor de contenidos
  6. Aplicación vacía

Básicamente se podrían describir como:

FOREGROUND_APP : Este es el proceso que ejecuta la aplicación actual en primer plano aplicación. Preferimos no matarlo.

VISIBLE_APP : Se trata de un proceso que sólo alberga actividades visibles para el usuario, por lo que preferimos que no desaparezcan.

SECONDARY_SERVER : Este es un proceso que mantiene un servidor secundario -- matarlo no tendrá mucho impacto en lo que respecta al usuario usuario.

HIDDEN_APP : Este es un proceso que sólo alberga actividades que no son visibles, por lo que puede ser eliminado sin ninguna interrupción.

CONTENT_PROVIDER : Se trata de un proceso con un proveedor de contenidos que no tiene ningún cliente asociado. Si tuviera algún cliente, su ajuste sería el de la más alta prioridad de esos procesos.

EMPTY_APP : Este es un proceso sin nada que se ejecute actualmente en en él. Definitivamente, es el primero en desaparecer.

Estos grupos se definen por oom_adj y las aplicaciones entrarían en uno de esos grupos en función de la oom_adj valor asignado a esa aplicación en particular. Las "aplicaciones en primer plano" suelen tener un oom_adj valor de 0 o menos (por lo que son los menos matables; es decir, de alta prioridad).

Las "aplicaciones vacías" tienen un oom_adj (se matan pronto; es decir, son de baja prioridad). También, oom_adj cambia según el estado de la aplicación del usuario; es 0 cuando la aplicación está activa en primer plano y se le asigna un valor mayor cuando la aplicación pasa a segundo plano.

¿Por qué difiere su "capacidad de matar"? Las aplicaciones que pertenecen a estos diferentes grupos (que tienen diferentes oom_adj's ), empiezan a morir en diferentes niveles de RAM libre. Estos límites de RAM desencadenantes están definidos por los valores de LMK minfree. Por encima de 6 categorías se corresponden con 6 límites de RAM límites que se establecen en el LMK minfree. eg: Android 4.3 de stock en mi dispositivo viene con los valores minfree de 48,60,72,84,96,120 . (estos están en MB).

enter image description here

Prácticamente lo que significa es que las aplicaciones vacías serán eliminadas cuando la memoria RAM baje de 120mb, los proveedores de contenido cuando baje de 96mb, las aplicaciones ocultas cuando baje de 84mb y así sucesivamente por último empieza a matar las aplicaciones en primer plano cuando la memoria RAM baje de 48mb. (Puedes notar que este último valor (48mb) no es deseable cuando se usan aplicaciones de memoria intensiva como juegos pesados).

NB:

  1. En un núcleo más nuevo, oom_ score _adj se utiliza en lugar de la antigua oom_adj . (el rango válido de oom_score_adj es de -1000 a 1000). Pero oom_adj también se mantiene para que sea compatible.

  2. Se dice que hay muchas categorías de procesos OOM que tienen asignadas diferentes oom_adj prioridades por el ActivityManagerService Pero, finalmente, todos ellos se considerarán por encima de seis ranuras/grupos (de acuerdo con oom_limits), con el fin de matar por los desencadenantes LMK minfree. Por lo tanto, esos seis son los importantes para los usuarios normales.

    • Podemos comprobar los valores minfree (también cambiarlos) y ver los OOM de las aplicaciones/procesos con esta aplicación de Memory Manager fácilmente.
  3. No todos los dispositivos tienen la misma configuración OOM.


Mejora de la gestión de la memoria RAM

Hoy en día hay muchas implementaciones amigables del mecanismo de gestión de la RAM con UI en la configuración del sistema (como la optimización de la aplicación en la configuración de la batería, Aplicaciones protegidas en algunas ROMS, por ejemplo EMUI de Huawei etc) y puede tener el mismo efecto que el descrito anteriormente:

enter image description here

Dicho esto, ahora podemos explorar las formas en que se puede utilizar la RAM sin matar las aplicaciones en primer plano con demasiada frecuencia. Las áreas objetivo incluirán:

1.Ajustar los valores del minifree a las necesidades de cada uno

2.Bloqueo de aplicaciones en la memoria para evitar que sean eliminadas

3.Anulación del límite de aplicaciones ocultas de Android


  1. Ajuste de los valores minifree

    • Puede cambiar los valores minfree con el gestor de memoria y pulsar aplicar. (Además, hay una opción "aplicar en el arranque" y marcar para preservar la configuración a través de los arranques). Varias aplicaciones pueden lograr esto, por ejemplo Gestor de memoria , Gerente de Minfree etc.

    • Alternativamente, use terminal/adb usando páginas:

      #!/system/bin/sh echo “values” > /sys/module
  2. Bloquear las aplicaciones para que permanezcan en la memoria (haciéndolas residentes)

a) Uso de la configuración de la aplicación (Xposed)

  • Un método sencillo es utilizar el módulo Xposed, la configuración de la aplicación (se necesita Marco Xposed instalado)
  • Después de instalar el framework, descarga el módulo 'App Settings' a través del instalador Xposed.
  • Abra la configuración de la aplicación y permita que se carguen las aplicaciones, seleccione la aplicación de destino (en este caso navegador firefox )
  • En la página de configuración, active el interruptor y el modo de edición, marque la opción "Residente" y guarde. ( Hacer que las aplicaciones sean residentes, hace que las aplicaciones se queden en la memoria sin ser eliminadas y se aconseja utilizar el botón de salida en la aplicación de destino si ya no se necesita, de lo contrario privará de memoria a otras aplicaciones)

enter image description here

b) Utilizando armario de la memoria

Otra implementación de este concepto es el bloqueo de la aplicación de destino en la memoria mediante el control de los archivos del sistema para establecer oom_adj para todos los procesos en ejecución.

Cómo funciona la aplicación:

El almacén de memoria controla los archivos en el directorio /data y también controla archivos del sistema en Root para establecer oom_adj para los procesos en ejecución.

Todas las Las aplicaciones bloqueadas se bloquean automáticamente después de cada reinicio. Las aplicaciones están clasificadas como aplicaciones descargadas/sistema, para desbloquearlas seleccione la aplicación objetivo y haga clic en el candado de la derecha. (Opcionalmente, puede establecer oom_adj prioridad)

  1. Anulación del límite de aplicaciones ocultas

    • Además del mecanismo de eliminación de memoria baja, hay otro parámetro que controla la eliminación de aplicaciones ocultas y vacías. Las aplicaciones se eliminan cuando superan los límites especificados.

    • Hay una configuración de build.prop que puede controlar esto (por defecto suele ser un número bajo inferior a 25, y modificando esto se puede aumentar este valor a un valor mucho mayor como 80)

    • Añade esta línea al archivo build.prop en /system y deja otra línea en blanco debajo (asegúrate de hacer una copia de seguridad primero)

ro.sys.fw.bg_apps_limit=80


Referencias y créditos

  1. Gestión de la memoria RAM en Android (Créditos especiales: mrhnet )
  2. Casillero de la memoria
  3. Xposed - Información general, versiones y registro de cambios

1voto

Guillermo Gomez Puntos 423

Esta aplicación, Administrador de RAM afirma ser capaz de bloquear ciertas aplicaciones de la mecánica de gestión de RAM de Android.

También puede ir a AjustesBateríaOptimización de la batería y configurar Firefox para No optimizar puede ayudar un poco.

1voto

Zediiiii Puntos 111

El post de arriba es muy completo, pero voy a añadir instrucciones para algunos modelos específicos (robado de la página de la aplicación ASM). Tenga en cuenta que para las aplicaciones que utilizan más memoria (por ejemplo, Firefox), el sistema es probable que eventualmente matar a la aplicación de todos modos cuando otras aplicaciones piden espacio de memoria. Si se necesita la memoria caché, las aplicaciones más grandes y antiguas van primero, independientemente de la configuración de ahorro de batería, y Firefox es un gran gastador.


¿Cómo lidiar con los (conocidos) ahorradores de batería?

Samsung En los ajustes de Android > Mantenimiento del dispositivo > Batería, añade la aplicación a la lista de aplicaciones no supervisadas

Huawei (según modelos) En los ajustes de Android > Ajustes avanzados > Administrador de la batería, añade la aplicación a la lista de aplicaciones protegidas o: Batería > Cerrar apps tras el bloqueo de pantalla, desmarca la app de la limpieza de la pantalla de bloqueo

Xiaomi En tu aplicación de Seguridad: Batería % > Ahorro de batería de la aplicación, seleccione la aplicación y luego Sin restricciones y: En tu app de Seguridad: Permisos > Autoinicio y luego permitir que se inicie la aplicación.

Asus (Zenfone) Abre el gestor de inicio automático y permite que se inicie la aplicación.

OnePlus En los ajustes de Android > Batería > Menú > Doze agresivo e Hibernación de aplicaciones, marca la aplicación para excluirla de las aplicaciones optimizadas.

Infinix Abre tu aplicación Xmanager, Auto-start manager y permite que se inicie la aplicación.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X