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.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Optimización y análisis de inicio de la app {:#app-startup-analysis-optimization}
- Tiempo de inicio de la app
- Fotogramas congelados