La latencia de inicio es una métrica importante para retener a los usuarios activos por día y garantizar una experiencia del usuario fluida desde la primera interacción. Esto es especialmente cierto en entornos con poca RAM en los que se pueden considerar compensaciones de rendimiento. Sin embargo, antes de comenzar a mejorar el inicio de la app, es importante que comprendas los aspectos subyacentes que contribuyen al inicio.
Prácticas recomendadas
Envía un perfil de Baseline
Los perfiles de Baseline mejoran la velocidad de ejecución del código en aproximadamente un 30% desde el primer lanzamiento, ya que evitan la interpretación y los pasos de compilación just-in-time (JIT) para las instrucciones de código incluidas. Cuando se envía un perfil de Baseline a una app, Android Runtime (ART) puede optimizar las instrucciones de código incluidas a través de la compilación anticipada (AOT), lo que brinda mejoras de rendimiento para cada usuario nuevo y con cada actualización de la app.
Evita la inicialización inmediata
Evita realizar tareas que no sean necesarias en la secuencia de inicio de tu app.
La situación más probable para que tu app comience un proceso es a través de su inicio. Sin embargo, WorkManager, JobScheduler, BroadcastReceiver, los servicios vinculados y la biblioteca de inicio de AndroidX también pueden iniciar procesos de la app en segundo plano. Si es posible, evita inicializar con anticipación innecesaria cualquier elemento en tu clase Application
. Muchas bibliotecas se inicializan on demand, lo que te permite invocarlas solo cuando es necesario.
Mueve tareas del subproceso de IU al subproceso en segundo plano
Si hay tareas que tardan más y bloquean el subproceso principal, muévelas a un subproceso en segundo plano o usa WorkManager para garantizar la eficiencia. Identifica las operaciones que duran demasiado o consumen más tiempo del esperado. La optimización de estas tareas puede ayudar a mejorar drásticamente la latencia de inicio.
Analiza y soluciona la contención de lectura de disco excesiva
StrictMode es una herramienta para desarrolladores que puede ayudar a detectar el acceso accidental al disco o a la red en el subproceso principal de la app, donde se reciben operaciones de IU y tienen lugar las animaciones. Una vez que la herramienta detecte un área posible de mejora, puedes finalizar automáticamente la app o registrar el incumplimiento para realizar una inspección posterior.
Evita las IPC síncronas
A menudo, las pausas prolongadas en la ejecución de tu app se deben a las llamadas a Binder, el mecanismo de comunicación entre procesos (IPC) de Android. En las versiones recientes de Android, es una de las razones más comunes por la que el subproceso de IU deja de ejecutarse. En general, para corregir este problema, no debes invocar funciones que hagan llamadas a Binder. Si no puedes evitarlo, debes almacenar en caché el valor o pasar el trabajo a subprocesos en segundo plano. Si deseas obtener más información, consulta Demoras en la programación de subprocesos.