El daemon del optimizador de poca memoria (LMK) de Android supervisa el estado de la memoria de un sistema Android en ejecución y reacciona ante una presión de memoria alta finalizando los procesos menos esenciales. Android vitals hace un seguimiento de las finalizaciones por LMK percibidas por el usuario y las informa en Google Play Console para ayudarte a identificar los problemas de presión de memoria que afectan a tus usuarios.
Métrica de LMK en Android vitals
Android vitals puede ayudarte a supervisar y mejorar la tasa de LMK de tu app. Android vitals mide solo una tasa de LMK: la tasa de LMK percibido por el usuario.
La métrica refleja el porcentaje de usuarios activos por día que experimentaron al menos un LMK percibido por el usuario. Un error de LMK percibido por el usuario es aquel que probablemente el usuario haya notado. Por ejemplo, se incluyen los errores de LMK que se producen cuando tu app muestra una actividad o se ejecuta como un servicio en primer plano. Estas finalizaciones dan como resultado una salida inmediata y no ordenada del proceso. Para el usuario final, parece que la app falló, lo que suele omitir los mecanismos estándar de guardado de estado del ciclo de vida y provocar la pérdida del progreso del usuario.
Android vitals se enfoca en estas finalizaciones de procesos porque sirven como un proxy de alta fidelidad para los problemas de mala administración de la memoria. Una tasa de LMK superior al 1% indica una necesidad crítica de tomar medidas de inmediato. Sin embargo, una tasa de LMK más baja no significa necesariamente que el uso de memoria de la app sea saludable. Esa tasa más baja podría significar que el daemon de LMK finaliza con frecuencia los procesos mientras están en segundo plano, lo que degrada el rendimiento del "inicio semicaliente" y la fluidez de la multitarea.
Puedes encontrar la métrica en la sección Estabilidad de Android vitals:

Al igual que con otras métricas esenciales similares, como las de ANR y fallas, puedes filtrar las métricas, compararlas con las de tus pares o supervisar su cambio durante un período prolongado (hasta 3 años). Los datos están disponibles para las apps existentes a partir del 28 de enero de 2025.

Cómo funciona el daemon de optimización de poca memoria
La plataforma de Android se basa en la premisa de que la memoria disponible es memoria desperdiciada, Android intenta usar toda la memoria disponible en todo momento. Por ejemplo, el sistema guarda las apps en la memoria después de que se cierran para que el usuario pueda volver a abrirlas con rapidez. Por esta razón, a menudo, los dispositivos Android funcionan con muy poca memoria libre (consulta Asignación de memoria entre procesos).
Para decidir qué proceso finalizar cuando queda poca memoria libre, el daemon de optimizador de poca memoria (LMK) usa una puntuación de memoria insuficiente llamada oom_adj_score para priorizar los procesos en ejecución. Los procesos con una puntuación alta son los primeros en cerrarse. Primero se cierran las apps en segundo plano, mientras que los procesos del sistema son los últimos que se cierran. En la siguiente tabla, se enumeran las categorías de puntuación de LMK en orden descendente.
Primero se cierran los procesos de la categoría de mayor puntuación, que se encuentran en la fila uno:
Herramientas de generación de perfiles de memoria
Las siguientes herramientas pueden ayudarte a encontrar y diagnosticar problemas de memoria de las siguientes maneras:
- Observa el modo en que tu app asigna memoria en el tiempo. Puedes encontrar un gráfico en tiempo real de la cantidad de memoria que usa tu app, la cantidad de objetos Java asignados y cuándo se produce la recolección de elementos no utilizados.
- Inicia eventos de recolección de elementos no utilizados y toma una instantánea del montón de Java mientras se ejecuta tu app.
- Registra las asignaciones de memoria de tu app, inspecciona todos los objetos asignados y observa el seguimiento de la pila para cada asignación.
Si tu juego se ejecuta en un motor nativo, usa HWAddress Sanitizer para depurar la asignación de memoria nativa.
Generador de perfiles de memoria de Android Studio
Android Studio proporciona el Generador de perfiles de memoria como un componente del Generador de perfiles de Android que te ayuda a identificar fugas de memoria y saturación de la memoria que pueden provocar inestabilidades, fallas e incluso fallas de apps. El generador de perfiles muestra un gráfico en tiempo real del uso de memoria de tu app y te permite capturar un volcado de montón, forzar la recolección de elementos no utilizados y realizar el seguimiento de la asignación de memoria.
Herramientas de generación de perfiles de memoria de Unity
Si usas Unity Engine para compilar tus apps, puedes seguir la guía de generación de perfiles de memoria de Unity. Unity ofrece dos herramientas para analizar el uso de memoria en tu aplicación en Unity.
El primero es el módulo del Generador de perfiles de memoria, que es un generador de perfiles integrado que te brinda información básica sobre dónde tu aplicación usa memoria.
La segunda herramienta es el paquete Generador de perfiles de memoria, que es un paquete de Unity que puedes agregar a tu proyecto. El paquete agrega una ventana adicional del Generador de perfiles de memoria al editor de Unity. El Generador de perfiles de memoria te permite analizar el uso de memoria en tu aplicación con aún más detalle. Puedes almacenar y comparar instantáneas para encontrar fugas de memoria o ver el diseño de la memoria para encontrar problemas de fragmentación de memoria.
Para conocer los flujos de trabajo de Unity específicos de Android, consulta Cómo verificar el uso de memoria con las herramientas de Unity, Cómo optimizar el uso de memoria en Unity y Cómo depurar los LMK para juegos de Unity.
Unreal Memory Insights
Las apps compiladas por Unreal Engine pueden usar Unreal Memory Insights para ver información detallada sobre la asignación y desasignación de memoria, incluidas las etiquetas de memoria de bajo nivel (LLM) y las pilas de llamadas asociadas con bloques de memoria.
El sistema de consultas de Memory Insights puede encontrar asignaciones activas en cualquier momento, identificar cambios en el uso de memoria, localizar fugas de memoria y diferenciar las asignaciones a corto plazo de las de largo plazo.
A partir de UE 5.4, Memory Insights admite el seguimiento de memoria con pilas de llamadas para proyectos de Android.
Para conocer los flujos de trabajo de Unreal específicos de Android, consulta Cómo verificar el uso de memoria con Unreal y Cómo optimizar el uso de memoria en Unreal.
Estadísticas de memoria baja
Android proporciona devoluciones de llamada y APIs que te permiten reducir el uso de memoria de tu juego y determinar por qué se cerraron las ejecuciones anteriores.
Devoluciones de llamada
No te registres para recibir devoluciones de llamada de recorte obsoletas. Android no proporciona APIs para detectar eventos de presión de memoria nativa antes de que el sistema recupere memoria, y las devoluciones de llamada de recorte de memoria en ejecución detalladas (TRIM_MEMORY_RUNNING_*) no han sido eficaces para evitar las finalizaciones por falta de memoria.
Como resultado, Android dejó de admitir todos los niveles de recorte, excepto TRIM_MEMORY_UI_HIDDEN y TRIM_MEMORY_BACKGROUND. Usa estas devoluciones de llamada restantes (o
equivalentes del ciclo de vida del motor, como OnApplicationPause de Unity y
ApplicationWillEnterBackgroundDelegate de Unreal) para liberar la IU y los recursos
auxiliares cuando el juego pase a segundo plano. Para obtener detalles sobre la implementación, consulta Cómo reducir la memoria en los juegos.
Cierre inesperado del juego
Android intenta usar toda la memoria disponible para almacenar en caché las apps y los juegos, y garantizar que se carguen rápidamente (lo que mejora la experiencia del usuario). Sin embargo, cuando la memoria se limita, el sistema finaliza las apps y los juegos que consumen más memoria para liberarla y permitir el funcionamiento normal del dispositivo.
La información, las estadísticas y las prácticas recomendadas para ayudarte a lograr un mejor uso de la memoria del juego incluyen lo siguiente:
- Usa
ApplicationExitInfo: Esta API devuelve el motivo por el que el sistema Android finalizó la ejecución anterior del juego. UsaApplicationExitInfopara verificar si la memoria baja (REASON_LOW_MEMORY) o las finalizaciones del limitador de memoria (REASON_MEMORY_LIMITER) son el motivo de la salida de un proceso anterior (consulta ApplicationExitInfo para juegos). Verifica si el juego se cerró debido a la presión de memoria para que se pueda optimizar y usar menos memoria en ese dispositivo. - Observa la RAM física total: Para evitar que los juegos se cierren cuando están en primer plano y para que coincidan con las capacidades del dispositivo, observa la RAM física total por dispositivo para obtener un nivel de detalle preciso y ajustar el uso de memoria del juego en función de eso. Si el objetivo es evitar que las apps se cierren poco después de pasar a segundo plano (para permitir que el jugador realice varias tareas a la vez), usa las devoluciones de llamada de recorte (
TRIM_MEMORY_UI_HIDDENespecíficamente) para reducir el uso de memoria del juego.
Recursos adicionales
- Acerca de la administración de la memoria para juegos
- Cómo supervisar el uso de memoria en los juegos
- Cómo reducir el uso de memoria en los juegos
- Descripción general de la administración de la memoria