Uso de memoria del mapa de bits

Los mapas de bits suelen ser los objetos que más memoria consumen en una app. Las operaciones de decodificación y escalamiento suelen estar en la ruta crítica para la renderización de fotogramas. La optimización del uso de memoria de mapas de bits proporciona mejoras significativas en la capacidad de respuesta de la IU, la duración de la batería y la estabilidad general, ya que reduce los bloqueos, los ANR y las finalizaciones de procesos relacionadas con errores de OOM.

Identifica el uso elevado de memoria de mapa de bits

Android vitals proporciona métricas sobre el espacio en memoria de mapa de bits de una app agregando datos de dispositivos Android. De forma predeterminada, estas métricas se calculan como un resumen de 28 días de los datos diarios. Estos datos ayudan a identificar tendencias y posibles regresiones en la eficiencia de la memoria en diferentes tipos y versiones de dispositivos.

Android vitals comparte el uso de memoria de mapa de bits de tu app desglosado por los siguientes estados de proceso:

  • Primer plano: El proceso de la app es visible. Se espera que el P99 sea significativamente más alto en primer plano que en otros estados del proceso, pero los desarrolladores deben investigar si la proporción P99/P50 es significativa (p.ej., superior a 3.5 veces), ya que esto suele indicar una fuga de memoria de mapa de bits. Para identificarlo, busca una divergencia entre el uso típico (P50) y el uso atípico (P99). Si bien el aumento general de activos incrementa la memoria de manera uniforme en todos los percentiles, las pérdidas de memoria se agravan con el tiempo y sesgan en gran medida los datos del extremo final (P99). Asegúrate de que las asignaciones de mapas de bits en primer plano no persistan innecesariamente después de que la app pase a otros estados.
  • Servicios percibidos por el usuario: El proceso de la app se ejecuta en un estado perceptible. Esto incluye los servicios en primer plano, los trabajos acelerados y los trabajos de transferencia de datos iniciados por el usuario. Las apps no deben retener asignaciones de mapa de bits en primer plano pesadas cuando realizan la transición a estos estados. Dado que estos servicios están diseñados para tareas de larga duración, retener recursos grandes degrada la experiencia general del usuario y obliga al daemon de cierre por falta de memoria (LMKD) a recuperar memoria cerrando procesos de menor prioridad.
  • Segundo plano: La app está ejecutando un servicio en segundo plano o se pasó a segundo plano recientemente, pero aún no se almacenó en caché. Dado que este estado de proceso es menos importante que los procesos en primer plano o perceptibles, las apps deben liberar explícitamente los recursos de mapa de bits grandes aquí para reducir la presión de la memoria.
  • Almacenada en caché: La app está en estado de caché. Este estado es muy sensible a la presión de la memoria del sistema, como los LMK. En este estado, las apps deben reducir de forma proactiva el uso de memoria de mapa de bits para evitar que el SO los expulse.

Factores que contribuyen al alto uso de memoria de mapa de bits

En el cálculo, también se puede incluir la memoria virtual que nunca se usó. Si observas un uso de memoria de mapa de bits inesperadamente alto, verifica que no estés asignando memoria que no se usa.