Aquí hay una explicación más detallada:
Choreographer permite que las aplicaciones se conecten a la sincronización virtual y sincronice correctamente las cosas para mejorar el rendimiento.
Las animaciones de vista de Android utilizan internamente a Choreographer con el mismo propósito: cronometrar adecuadamente las animaciones y posiblemente mejorar el rendimiento.
Dado que se informa a Choreographer sobre todos los eventos vsync, puedo decir si uno de los Runnables que pasó el Choreographer.post * apis no termina en el tiempo de un cuadro, lo que hace que se omitan los cuadros.
En mi opinión, el Coreógrafo solo puede detectar el salto de cuadro. No tiene forma de decir por qué sucede esto.
El mensaje "La aplicación puede estar haciendo demasiado trabajo en su hilo principal". Podría ser engañoso.
fuente:
Significado de los mensajes del coreógrafo en Logcat
¿Por qué deberías preocuparte?
Cuando aparece este mensaje en el emulador de Android y el número de fotogramas omitidos es bastante pequeño (<100), puede apostar con seguridad de que el emulador es lento, lo que sucede casi todas las veces. Pero si el número de cuadros se omitió y es grande y del orden de más de 300, entonces puede haber algunos problemas serios con su código. Los dispositivos Android vienen en una amplia gama de hardware a diferencia de los dispositivos iOS y Windows. La RAM y la CPU varían y si desea un rendimiento razonable y una experiencia de usuario en todos los dispositivos, entonces debe solucionarlo. Cuando se omiten los marcos, la interfaz de usuario es lenta y lenta, lo que no es una experiencia de usuario deseable.
Como arreglarlo
Arreglar esto requiere identificar nodos donde hay o puede ocurrir una larga duración del procesamiento. La mejor manera es hacer todo el procesamiento sin importar cuán pequeño o grande en un hilo separado del hilo principal de la interfaz de usuario. Entonces, ya sea accediendo a datos desde la base de datos SQLite o haciendo algunos cálculos matemáticos o simplemente ordenando una matriz: hágalo en un hilo diferente
Ahora hay un problema aquí: creará un nuevo subproceso para realizar estas operaciones y cuando ejecute su aplicación, se bloqueará diciendo "Solo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas". Necesita saber este hecho de que la interfaz de usuario en Android se puede cambiar por el hilo principal o solo por el hilo de la interfaz de usuario. Cualquier otro hilo que intente hacerlo, falla y falla con este error. Lo que debe hacer es crear un nuevo Ejecutable dentro de runOnUiThread y dentro de este ejecutable debe realizar todas las operaciones relacionadas con la IU. Encuentra un ejemplo aquí .
Entonces tenemos Thread and Runnable para procesar datos fuera de Thread principal, ¿qué más? Hay AsyncTask en Android que permite realizar procesos a largo plazo en el hilo de la interfaz de usuario. Esto es lo más útil cuando sus aplicaciones están basadas en datos o en aplicaciones web o utilizan interfaces de usuario complejas, como las que se crean con Canvas. El poder de AsyncTask es que permite hacer cosas en segundo plano y una vez que haya terminado el procesamiento, simplemente puede realizar las acciones necesarias en la interfaz de usuario sin causar ningún efecto rezagado. Esto es posible porque AsyncTask se deriva del subproceso de IU de Activity: todas las operaciones que realiza en UI a través de AsyncTask se realizan en un subproceso diferente del subproceso de IU principal, sin obstáculos para la interacción del usuario.
Entonces, esto es lo que necesita saber para crear aplicaciones de Android fluidas y, hasta donde sé, cada principiante recibe este mensaje en su consola.