Prácticas recomendadas de optimización de apps

Las siguientes prácticas recomendadas ayudan a optimizar tu app sin sacrificar la calidad.

Usa perfiles de Baseline

Los perfiles de Baseline pueden mejorar la velocidad de ejecución del código en un 30% a partir del primer lanzamiento y pueden optimizar todas las interacciones del usuario, como el inicio de la app, la navegación entre pantallas o el desplazamiento a través de contenido sin interrupciones desde la primera ejecución. El aumento de la velocidad y la capacidad de respuesta de una app genera más usuarios activos por día y un promedio más alto en la tasa de visitas recurrentes.

Usa un perfil de inicio

Un perfil de inicio es similar a un perfil de Baseline, pero se ejecuta en el tiempo de compilación para optimizar el diseño de DEX y así lograr un inicio más rápido de la app.

Usa la biblioteca de App Startup

La biblioteca de App Startup te permite definir inicializadores de los componentes que comparten un solo proveedor de contenido, en lugar de definir proveedores de contenido por separado para cada componente que necesites inicializar. Esto puede acelerar en gran medida el tiempo de inicio de la app.

Carga bibliotecas de forma diferida o inhabilita la inicialización automática

Las apps consumen muchas bibliotecas. Algunas de ellas pueden ser obligatorias para el inicio, pero muchas otras pueden retrasar su inicialización hasta que se haya dibujado el primer fotograma. Algunas bibliotecas tienen la opción de inhabilitar la inicialización automática en el inicio o inicializarse a pedido. Usa esta opción para posponer la inicialización hasta que la necesites para mejorar el rendimiento. Por ejemplo, puedes usar la inicialización a pedido para invocar solamente a WorkManager cuando se requiera el componente.

Usa ViewStubs

Un ViewStub es un objeto View invisible de tamaño cero que puedes usar para aumentar de forma diferida los recursos de diseño durante el tiempo de ejecución. Esto te permite demorar el aumento de las vistas que no son necesarias al inicio.

Si usas Jetpack Compose, puedes obtener un comportamiento similar a ViewStub con el estado para diferir la carga de algunos componentes:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Para cargar los elementos que admiten composición dentro del bloque condicional, modifica shouldLoad:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Esto activa una recomposición que incluye el código dentro del bloque condicional en el primer fragmento.

Optimiza la pantalla de presentación

Estas pantallas son una parte importante del inicio de una app. Una pantalla de presentación bien diseñada puede ayudar a mejorar la experiencia general del inicio de la app. Android 12 (nivel de API 31) y las versiones posteriores incluyen una pantalla de presentación diseñada para mejorar el rendimiento. Consulta Pantalla de presentación para obtener más información.

Usa tipos de imágenes escalables

Es recomendable que uses elementos de diseño vectoriales para las imágenes. Si no es posible, usa imágenes de WebP. WebP es un formato de imagen que proporciona una compresión con y sin pérdida superior para imágenes de la Web. Con Android Studio, puedes convertir imágenes GIF estáticas o BMP, JPG o PNG ya existentes a formato WebP. Para obtener más información, consulta Cómo crear imágenes WebP.

Además, se minimiza la cantidad y el tamaño de las imágenes que se cargan durante el inicio.

Usa las APIs de rendimiento

La API de rendimiento para la reproducción de contenido multimedia está disponible en Android 12 (nivel de API 31) y versiones posteriores. Puedes aprovechar esta API para comprender las capacidades de los dispositivos y realizar operaciones en consecuencia.

Prioriza los registros de inicio en frío

Un inicio en frío hace referencia a una app que se inicia desde cero. Es decir, el proceso del sistema aún no crea el proceso de la app. Por lo general, tu app se inicia en frío si la inicias por primera vez desde que se inició el dispositivo o desde que el sistema fuerza su detención. Los inicios en frío son mucho más lentos porque la app y el sistema deben realizar más trabajo del necesario en otros tipos de inicio, como los inicios semicaliente y en caliente. Los registros del sistema de los inicios en frío te ofrecen una mejor supervisión del rendimiento de la app.