Aplicación de Android OOM (Memoria insuficiente) prioridades de ajuste para los procesos

Estoy desarrollando una aplicación de Android Launcher (reemplazo de pantalla de inicio) y corriendo en el lanzador de obtener muertos en situaciones de baja memoria. Esto obviamente no es grande cuando el usuario regresa a casa y tiene que esperar.

En mi investigación, he encontrado que Android clasifica los procesos en varios grupos prioritarios, de mayor a menor:

Sistema

Persistente

Primer plano

Visible

Perceptible

A Servicios

Casa

Anterior

B Servicios

Fondo

Puede examinar qué procesos caen bajo los cuales ejecutando: adb shell dumpsys meminfo

La documentación más completa que pude encontrar sobre este tema fue: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

Sin embargo, no da una imagen clara de todos los grupos mencionados anteriormente. Específicamente,

  1. ¿Cómo / cuándo es un proceso considerado "perceptible"? Algunas aplicaciones (como el Go Launcher EX ) parecen haber descubierto cómo permanecer en esta categoría cuando no están en primer plano. De esta manera, no se matan como a menudo. ¿Cómo lo hacen?

    Encuentro de la actividad de los dumpsys de la cáscara del adb que Go Launcher Ex se considera un servicio del primero plano. La única documentación que puedo encontrar en este tema dice que es necesario poner una notificación persistente en la barra de estado. Sin embargo, Go Launcher Ex de alguna manera consiguió alrededor de este requisito. Estoy perdido en cuanto a cómo

  2. ¿Cuál es la diferencia entre "A Services", "Home" y "B Services"?

  3. Cualquier otro consejo general para una aplicación de lanzador sobre cómo puede obtener mayor prioridad que una aplicación regular? Creo que esto es una solicitud completamente legítima dado que un lanzador debe ser considerado como una prioridad más alta que la mayoría de las cosas (excepto la actividad de primer plano actual) para los usuarios.

Para responder a la pregunta 1) y 3)
Si logcat -b events se pueden ver las aplicaciones con prioridad perceptible de hecho crear una notificación. Pero todas las propiedades (incluso contentView) se establecen en null.
Así que en mi investigación para el mismo problema que sólo trató de crear una notificación de vacío y comenzar mi servicio con él:

startForeground(42, new Notification())

Y voilà: logcat dice:

 I/notification_enqueue( 1607): [my.testapp.TestApp,42,NULL,Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 kind=[null])] 

Y dumpsys meminfo:

 ... 17539 kB: Perceptible ... 6164 kB: my.testapp.TestApp (pid 25573) ... 

No pienso que esto se piensa, y debe ser entendido que esto debe ser utilizado solamente si realmente realmente requerido. No quiero imaginar cada pésimo servicio usando esto.

De acuerdo con el documento referenciado, puede intentar iniciar un servicio a largo plazo con mayor prioridad en el Lanzador y comprobar el rendimiento KILL veces.

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