Novedades sobre productos

Cómo preparar tu app para límites de memoria más amplios

Lectura de 2 min
Ver el perfil de Blair Harmon
Blair Harmon Director de Administración de Productos, Plataforma de Android

Una excelente experiencia del usuario es fundamental para la misión de Android, y cumplir con esa promesa requiere que los dispositivos sean rápidos, responsivos y confiables. Por eso, la optimización de la memoria es más importante que nunca. En todo el ecosistema, los dispositivos nuevos mantienen o incluso disminuyen su capacidad de memoria física en respuesta a los aumentos de precios de la memoria, pero los usuarios siguen esperando la misma experiencia de app fluida y de alto rendimiento.

En Android 17, introdujimos límites de memoria por app, comenzando con los dispositivos Pixel, para ayudar a proteger la experiencia del usuario general de las aplicaciones que usan exceso de memoria y provocan ralentizaciones en todo el sistema. Durante el próximo año, cada vez más fabricantes aprovecharán los límites de memoria por app de Android en su cartera de configuraciones de RAM de dispositivos, desde dispositivos de 4 GB hasta dispositivos de más de 16 GB. Si tu app supera estos límites, se ralentizará y es posible que se finalice. Optimizar el espacio en memoria de tu app es fundamental para evitar la limitación del SO y mantener una experiencia del usuario fluida.  

En esta publicación, exploraremos cómo funcionan estos límites, cómo medir tu espacio en memoria con las nuevas métricas de Android vitals y los pasos prácticos para optimizar tu app o juego.

Información sobre los límites de memoria 

Cuando tu app supera su presupuesto de memoria, Android toma medidas progresivas para proteger la capacidad de respuesta del dispositivo:

  1. Intercambio de zRAM: Si tu app alcanza el límite asignado, el sistema fuerza las páginas de la app a la zRAM (RAM comprimida). Si bien zRAM evita el desalojo inmediato, la compresión y descompresión de páginas agrega una sobrecarga de CPU, lo que puede generar tirones notables en la IU y ralentizaciones de la experiencia.
  2. Finalización del proceso: Si tu app sigue aumentando su uso de memoria más allá del umbral de zRAM, el sistema la finalizará.  Para determinar si tu sesión de la app se vio afectada por estas restricciones en el campo, puedes llamar a getDescription() dentro de ApplicationExitInfo.  Si el sistema aplicó un límite, el motivo de salida se informa como REASON_OTHER y la cadena de descripción contendrá "MemoryLimiter:AnonSwap". También puedes aprovechar el registro de perfil basado en activadores con TRIGGER_TYPE_ANOMALY para capturar automáticamente volcados de pila cuando se alcanza el límite de memoria.  

Para obtener más información sobre los límites de memoria por app y la aplicación del sistema, consulta la documentación sobre los límites de memoria de las apps en Android 17. Para probar tu aplicación en diferentes configuraciones de dispositivos, usa los comandos adb de Memory Limiter

Supervisión y diagnóstico de problemas de memoria

No puedes optimizar lo que no puedes medir. Para identificar fugas de memoria, asignaciones excesivas de montón y fallas de memoria insuficiente (OOM) en todo el ecosistema de Android, es necesario aprovechar herramientas de supervisión complementarias:

  • Estado general a nivel macro con Android vitals: Para obtener visibilidad general a nivel de la población sin una sobrecarga adicional, Android vitals de Google Play Console proporciona métricas esenciales, como Uso de memoria (RSS anónimo + espacio de intercambio) Uso de memoria de mapa de bits. Esto te brinda una instantánea clara de la distribución de la memoria en los diferentes estados del proceso (primer plano, segundo plano, servicios percibidos por el usuario y en caché) y los rangos de clases de RAM, lo que te ayuda a detectar valores atípicos de memoria.
  • Salidas del limitador de memoria y seguimiento de OOM con Firebase Crashlytics: Para mantenerte informado sobre la degradación grave de la memoria antes de que afecte tus métricas clave, Crashlytics versión 20.1.0 presenta datos de depuración adicionales para ayudarte a detectar, priorizar y corregir las excepciones de falta de memoria y las finalizaciones del limitador de memoria. El seguimiento de estos eventos junto con los registros personalizados y los metadatos de par clave-valor te brinda contexto inmediato sobre el estado del proceso cuando se produce una falla de memoria.
  • Registros en el campo con ProfilingManager: Para los equipos que pueden mantener un framework de observabilidad del rendimiento, la API de ProfilingManager introducida en Android 15 (nivel de API 35) permite que tu app solicite y recopile de forma programática artefactos detallados de depuración de memoria, como volcados de montón de Java y perfiles de montón, directamente desde dispositivos de producción. También puedes activar capturas de volcados de montón según indicadores específicos del sistema, como TRIGGER_TYPE_OOM y TRIGGER_TYPE_ANOMALY

Lee nuestra documentación para obtener más información sobre otras técnicas de supervisión de la memoria.

Resumen y próximos pasos

Ahora es el momento de auditar el espacio en memoria, ya que Android amplía los límites de memoria por app en todas las clases de RAM:

  1. Prioriza las optimizaciones de memoria: Evita que tu app se vea afectada por los límites de memoria de la app usando las prácticas recomendadas
  2. Supervisa el uso de memoriaSupervisa el comportamiento de la memoria de tu app para detectar y resolver comportamientos anómalos.  
  3. Optimiza tu juego: Sigue la orientación más reciente para juegos y apps multimedia complejas para maximizar el ahorro de memoria en los estados del proceso.

Recursos y referencias útiles

Escrito por:
Continuar leyendo