6 votos

¿Cómo reducir el valor OOM de una aplicación de forma permanente?

No estoy cuestionando la técnica de gestión de memoria de Android (como hacen los asesinos). Sólo quiero dar mayor prioridad a una aplicación incluso cuando no está en primer plano o visible (con notificación).

Optimizador de memoria AutoKiller es capaz de hacerlo en el dispositivo rooteado, pero el cambio dura unos segundos si hago multitarea.

Quiero hacer esto permanentemente: tal vez ejecutar un demonio en segundo plano para hacer el cambio continuamente debería funcionar. ¿Cómo hacerlo?

0 votos

El mismo problema aquí. Puedes usar el supercargador v6 para solucionar parcialmente tus problemas.

0 votos

Puedes pedir al desarrollador que añada un servicio (opcional) con la aplicación. Las aplicaciones que tienen un servicio conectado tienen menos probabilidades de ser eliminadas por OOM.

1 votos

@Izzy La prioridad de las aplicaciones que tienen servicios es menor que las que están en primer plano y son visibles. Por cierto, ¿cuántos desarrolladores me sugieres que calcule? No es una solución...

4voto

Izzy Puntos 45544

En XDA he encontrado un puesto discutiendo cómo PINear una aplicación para que no sea asesinada por OOM. Como tu pregunta indica que tu dispositivo está rooteado, esto podría ser útil para ti. El principio descrito allí se puede aplicar a su caso también simplemente cambiando el oom_adj valor especificado (el -17 lo PIN permanentemente, el prio más alto -- así que use un valor más grande para "debilitar" eso).

El script publicado allí se parece a esto:

#!/system/bin/sh
sleep 60

PPID=$(pidof com.estrongs.android.safer)
echo "-17" > /proc/$PPID/oom_adj

Un usuario anónimo señaló que también podría establecer este archivo con permisos de sólo lectura para evitar que Android lo actualice, añadiendo chmod 444 /proc/$PPID/oom_adj al script anterior (el 444 propuesto no significa nada más que el permiso de lectura, pero no afecta a la capacidad del sistema para eliminar el archivo cuando el proceso termina). No lo he verificado, pero de hecho esto podría ahorrarle la ejecución en bucle/repetida del script, haciendo que el valor establecido sea permanente mientras el proceso viva.

Como se ha dicho, sustituya el -17 por su valor elegido. Sustituya también el nombre del paquete de la aplicación ( com.estrongs.android.safer ) por el nombre del paquete de su aplicación de destino. También puede bajar el sleep o incluso omitir el sueño.

Ahora necesitas una manera de auto-ejecutar esto tan pronto como tu aplicación se esté ejecutando. Para esta parte, podrías, por ejemplo, utilizar Tasker : El contexto sería "app running" (y tu app seleccionada), y la tarea "run shell", con el script anterior como parámetro. Entonces, tan pronto como se inicie su aplicación (y llega a primer plano), Tasker ejecutaría el script -- y el oom_adj debe aplicarse.

0 votos

Me he dado cuenta de que si pongo la aplicación en segundo plano, el valor de oom_adj cambia. ¿Significa esto que la aplicación ha sido desanclada?

1voto

Ethan Puntos 11

No se puede hacer desde el código de una aplicación (servicio de fondo o hilo o lo que sea). La razón está bien descrita en este post, http://debuggingisfun.blogspot.com/2014/03/Android-foolproof-low-memory-killer.html

0 votos

¡Bienvenido a Android Enthusiasts! Aunque esto puede responder teóricamente a la pregunta, sería preferible para incluir las partes esenciales de la respuesta aquí, y proporcionar el enlace como referencia.

-2voto

dancindead Puntos 1

ROM Toolbox Pro de Jrummy tiene incorporado un gestor de OOM.

1 votos

Eso es similar a Optimizador de memoria AutoKiller .. Lee la pregunta de nuevo ..

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