[REPRODUCIENDO MÚSICA] COLT MCANLIS: Y listo. [PITIDO] ¿Sabes lo que significa este temporizador? Cada cuarto de
segundo que un usuario pasa mirando una pantalla en blanco en
lugar de interactuar con su aplicación, es un
cuarto de segundo más que está dispuesto
a cerrar su aplicación y dedicar su atención
a otra cosa. [PITIDO] Mi nombre es Colt McAnlis,
y entender mal todas las cosas complejas que
suceden durante el inicio de la aplicación puede provocar algunos problemas de
rendimiento graves.
Ahora, vea, Android
es bastante inteligente cuando se trata de comprender
la percepción del desempeño humano. Tan pronto como el usuario
inicie su aplicación, Android mostrará inmediatamente
una ventana de inicio, que permanecerá hasta que su
aplicación esté completamente cargada, inicializada y pueda
dibujar su primer cuadro. Este comportamiento se ve con
mayor frecuencia cuando su aplicación se inicia
por primera vez, pero también puede ocurrir fácilmente en
otras ocasiones, como cuando la actividad pasa
a primer plano, o después de que el usuario
sale de su aplicación, o después de una
parte El sistema ha purgado tu aplicación
para ahorrar memoria.
Básicamente, cada vez que el usuario
pasa de otra cosa a su aplicación,
existe la posibilidad de que pueda ver este
tipo de comportamiento. El
punto importante aquí es este. Permitir que el usuario pase
demasiado tiempo mirando la ventana de inicio le da
una gran oportunidad de aburrirse y
pasar a otras cosas. Y demorar demasiado
en general podría incluso hacer
que aparezca el cuadro de diálogo La aplicación no responde. Ninguno de estos es muy
bueno para la retención de usuarios. Entonces, desde el punto de vista
técnico, todo el proceso funciona de la siguiente manera.
Cuando el usuario inicia su aplicación,
el sistema hace un poco de trabajo para cargar la
información de su aplicación y crear un
proceso único para su aplicación. A partir de ahí, el
proceso del sistema mostrará la
ventana de inicio y básicamente colgará hasta que la
aplicación esté en funcionamiento. Mientras tanto, el
proceso de la aplicación creará el
objeto de la aplicación y lanzará el hilo principal. Aquí es donde
se inicializará, creará,
inflará y finalmente dibujará su actividad de inicio. Solo en este punto,
después de que la aplicación haya dibujado su primer cuadro,
el proceso del sistema cambia la
ventana de inicio de la aplicación. Ahora, para ser claros, la mayor parte
de todo ese proceso ocurre bastante limpiamente. Realmente no hay muchas
posibilidades de que el rendimiento se descarrile. Sin embargo, hay
tres grandes áreas en las que las cosas podrían
volverse problemáticas y que debes vigilar. Lo primero que realmente debería
echar un vistazo es todo el trabajo que implica
crear su clase de actividad. La mayoría de las veces, hay
mucho trabajo pesado que ocurre durante este
proceso, pero lo más pesado tiene que ser la inflación
de los diseños y la carga de recursos
que lo acompañan.
Este no es un proceso barato, y
si sus diseños son demasiado complejos o tiene alguna
lógica de bloqueo, esto puede causar algunos
problemas realmente grandes. En una nota similar, asegúrese de
echar un vistazo a la inicialización de su aplicación. Para aplicaciones realmente complejas
, la inicialización del objeto de la aplicación a menudo se
convierte en un cajón de basura para muchas
clases globales que pueden usarse entre actividades. Por lo tanto, tiende a
haber mucho trabajo aquí que podría posponerse
para más adelante o tal vez cargarse de
manera diferida. Ahora, hay muchas
aplicaciones que ofrecen
ventanas de inicio personalizadas. Esto se
hace para ayudar a marcar la aplicación o
para hacer que una carga lenta parezca una
aplicación de marca personalizada. Ahora, si está haciendo esto
para ocultar los malos tiempos de carga, obviamente,
primero debe solucionarlo. Pero si lo está
haciendo por la marca, entonces debe ser consciente de que
hay una forma correcta y una incorrecta de configurar esto, para que
no influya demasiado negativamente en la percepción del usuario.
Pero antes de que te metas
en la maleza y trates de arreglar este
tipo de patrones comunes, primero debes
sentarte y averiguar si tienes un
problema. Afortunadamente, Android
tiene algunas herramientas para ayudar. En primer lugar es el tiempo de visualización. Para versiones posteriores a
KitKat, Logcat incluirá una
línea de salida que muestra la cantidad de tiempo
entre el momento en que se inició el proceso y la actividad
finalmente dibujada en la pantalla. Esto puede ser útil,
porque le da una idea general de cuánto tiempo tarda
en ocurrir para su aplicación. Ah, por cierto
, tenga en cuenta que si desea ver este valor dentro
de Android Studio , debe desactivar los filtros
para la salida de Logcat.
Así que tenlo en mente. En segundo lugar está la
función reportFullyDrawn. La métrica mostrada
que se informa en Logcat es útil para la mayoría de las
situaciones en las que desea realizar
un seguimiento del tiempo que se tarda en pasar desde el
inicio de la aplicación hasta que se ve por primera vez. Sin embargo, en el
desarrollo de aplicaciones modernas, a menudo hay una gran carga
diferida, es decir, en lugar de bloquear el
dibujo inicial de la ventana, se cargan asíncronamente los recursos
y las vistas en segundo plano y se actualiza la
jerarquía de vistas en consecuencia. El resultado es que, si bien
la actividad inicial puede ser visible, es posible que aún no
esté completamente cargada con respecto a los recursos, lo que
podría considerarse una métrica separada para usar
al evaluar el rendimiento del tiempo de lanzamiento . Para solucionar este problema
, puede llamar manualmente a la
función activity.reportFullyDrawn para que el sistema sepa
que su actividad ha terminado con su carga diferida.
El tercero es el rastreo de métodos. Si bien display time
y reportFullyDrawn brindan una buena comprensión
del tiempo de carga general de su aplicación
, no brindan detalles sobre qué puede estar
causando que partes particulares de esa canalización duren
más de lo esperado. Para obtener más información
sobre esta área , puede usar la herramienta de
seguimiento del método de inicio dentro de Android Studio. Y finalmente está el
grande, Systrace.
Cuando agrega
funciones de seguimiento dentro de sus métodos onCreate
, aumentará su registro, de modo que la
herramienta Systrace pueda descubrir correctamente todas las
subsecciones y mostrarlas en su proceso de representación gráfica. Y si está buscando
más información sobre el rendimiento, no olvide consultar
el resto del contenido de "Patrones de rendimiento de Android".
Y asegúrese de unirse a la
comunidad de Google+ para hacer preguntas a otros gurús del rendimiento. Así que mantén la calma, crea un perfil de tu
código y recuerda siempre que el rendimiento importa. [REPRODUCIENDO MÚSICA].