Soy nuevo en el entorno Android SDK / API. Es el primero que intento dibujar un diagrama / gráfico. Intenté ejecutar diferentes tipos de códigos de muestra del emulador usando 3 bibliotecas gratuitas diferentes, no se muestra nada en la pantalla de diseño. El logcat está repitiendo el siguiente mensaje:
W / Trace (1378): valor inesperado de nativeGetEnabledTags: 0 Yo / Coreógrafo (1378): ¡Salteé 55 cuadros! La aplicación puede estar haciendo demasiado trabajo en su hilo principal.
El problema no persistió y el gráfico funcionó cuando ejecuté un código de muestra relacionado con una copia de evaluación de una biblioteca con licencia.
android
multithreading
usuario2038135
fuente
fuente
Respuestas:
tomado de: Android UI: arreglando marcos omitidos
Lo que esto significa es que su código tarda mucho en procesarse y se omiten los marcos debido a ello, tal vez debido a un procesamiento pesado que está haciendo en el corazón de su aplicación o acceso a la base de datos o cualquier otra cosa que haga que el hilo detente por un rato.
fuente
Como otros respondieron anteriormente, "¡Se saltaron 55 fotogramas!" significa que hay un procesamiento pesado en su aplicación.
Para mi caso, no hay un proceso pesado en mi solicitud. Revisé todo doble y triplemente y eliminé esos procesos que creo que fueron un poco pesados.
Eliminé Fragmentos, Actividades, Bibliotecas hasta que solo quedó el esqueleto. Pero aún así el problema no desapareció. Decidí verificar los recursos y descubrí que algunos íconos y antecedentes que uso son bastante grandes, ya que olvidé verificar el tamaño de esos recursos.
Por lo tanto, mi sugerencia es que si ninguna de las respuestas anteriores ayuda, también puede verificar el tamaño de los archivos de recursos.
fuente
Yo también tuve el mismo problema.
El mío fue un caso en el que estaba usando una imagen de fondo que estaba en dibujables. Esa imagen en particular era de aproximadamente 130 KB y se usaba durante la pantalla de inicio y la página de inicio en mi aplicación de Android.
Solución : acabo de cambiar esa imagen en particular a la carpeta drawables-xxx de drawables y pude liberar mucha memoria ocupada en el fondo y los marcos omitidos ya no se omiten.
Actualización Use la carpeta de recursos dibujables 'nodp' para almacenar archivos dibujables en segundo plano.
¿Tendrá prioridad una carpeta dibujable calificada para densidad o drawable-nodpi?
fuente
drawable-xxxhdpi
en lugardrawable
de lo reduce drásticamente la memoria usada (~ 70 por ciento menos). También es bueno saber que las pantallas con el mismo tamaño varían en tamaño de DPI. La relación en píxeles entre ellos esldpi = 1:0.75
,mdpi = 1:1
,hdpi = 1:1.5
,xhdpi = 1:2
,xxhdpi = 1:3
,xxxhdpi = 1:4
. Al usar ladrawable-xxxhdpi
carpeta, permite reducir las imágenes al tamaño de pantalla de su dispositivo, lo que reduce el consumo de memoria y CPU.drawable
adrawable-nodpi
evita que se obtenga la aplicaciónOut of Memory Error
.Otra causa común de demoras en el subproceso de interfaz de usuario es el acceso a las preferencias compartidas. Cuando llama a uno
PreferenceManager.getSharedPreferences
y otros métodos similares por primera vez, el archivo .xml asociado se carga inmediatamente y se analiza en el mismo hilo .Una de las mejores maneras de combatir este problema es desencadenar la primera carga SharedPreference desde el subproceso en segundo plano, que se inicia lo antes posible (por ejemplo, desde
onCreate
su clase de aplicación). De esta manera, el objeto de preferencia ya puede estar construido para cuando quiera usarlo.Desafortunadamente, a veces es necesario leer los archivos de preferencias durante las primeras fases del inicio (por ejemplo, en la Actividad inicial o incluso en la Aplicación en sí). En tales casos, todavía es posible evitar el bloqueo de la IU mediante el uso
MessageQueue.IdleHandler
. Haga todo lo demás que necesita realizar en el hilo principal, luego instale IdleHandler para ejecutar el código una vez que su Actividad se haya dibujado por completo. En ese Runnable, debería poder acceder a SharedPreferences sin retrasar demasiadas operaciones de dibujo y hacer que Choreographer sea infeliz.fuente
Intente utilizar las siguientes estrategias para mejorar el rendimiento de su aplicación:
fuente
Yo tuve el mismo problema. Android Emulator funcionó perfectamente en Android <6.0. Cuando utilicé el emulador Nexus 5 (Android 6.0), la aplicación funcionó muy lentamente con
I/Choreographer: Skipped frames
en los registros.Entonces, resolví este problema cambiando la
hardwareAccelerated
opción de archivo Manifiesto para que metrue
gustara esto:fuente
No soy un experto, pero recibí este mensaje de depuración cuando quería enviar datos desde mi aplicación de Android a un servidor web. Aunque utilicé la clase AsyncTask e hice la transferencia de datos en segundo plano, para recuperar los datos del resultado del servidor utilicé el método get () de la clase AsyncTask que hace que la IU sea sincrónica, lo que significa que su IU estará esperando demasiado tiempo. Entonces, mi consejo es hacer que su aplicación realice todas las tareas orientadas a la red en un hilo separado.
fuente
Optimice sus imágenes ... No use imágenes de más de 100 KB ... La carga de imágenes toma demasiada CPU y hace que su aplicación se bloquee.
fuente
Yo tuve el mismo problema. En mi caso, tenía 2 diseños relativos anidados. RelativeLayout siempre tiene que hacer dos pases de medida. Si anida RelativeLayouts, obtendrá un algoritmo de medición exponencial.
fuente
Esto suele suceder cuando se ejecutan grandes procesos en el hilo principal. está bien omitir marcos de menos de 200. pero si tiene más de 200 marcos omitidos, puede ralentizar el hilo de la interfaz de usuario de la aplicación. lo que puede hacer es hacer estos procesos en un nuevo subproceso llamado subproceso de trabajo y después de eso, cuando desee acceder y hacer algo con el subproceso de interfaz de usuario (por ejemplo, hacer algo con vistas, findView, etc.) puede usar el controlador o runOnUiThread (Me gusta más) para mostrar los resultados del procesamiento. Esto resuelve absolutamente el problema. El uso de hilos de trabajo es muy útil o incluso debe usarse cuando se trata de estos casos.
fuente
Yo tuve el mismo problema. Cuando ejecuté el código en otra computadora, funcionó bien. En el mío, sin embargo, mostraba "La aplicación puede estar haciendo demasiado trabajo en su hilo principal".
Resolví mi problema reiniciando Android studio [Archivo -> Cachés invalidados / Reiniciar -> haga clic en "Invalidar y reiniciar"].
fuente
En mi caso, fue porque accidentalmente había establecido un punto de interrupción en un método. Una vez que lo borré, el mensaje desapareció y el rendimiento mejoró mucho.
fuente
Mi aplicación tuvo el mismo problema. Pero no estaba haciendo más que mostrar una lista de tarjetas y texto en él. Nada corriendo en el fondo. Pero luego, después de una investigación, se descubrió que la imagen configurada para el fondo de la tarjeta estaba causando esto, a pesar de que era pequeña (350 kb). Luego convertí la imagen a imágenes de 9 parches usando http://romannurik.github.io/AndroidAssetStudio/index.html .
Esto funcionó para mí.
fuente
Después de hacer mucho I + D sobre este tema, obtuve la solución,
En mi caso, estoy usando un servicio que se ejecutará cada 2 segundos y con runonUIThread, me preguntaba si el problema estaba allí pero no del todo. El siguiente problema que encontré es que estoy usando una imagen grande en la aplicación de mayo y ese es el problema.
Eliminé las imágenes y configuré nuevas imágenes.
Conclusión: - Mira en tu código si hay algún archivo sin formato que estés usando que sea de gran tamaño.
fuente
Primero lea la advertencia. Dice más carga en el hilo principal. Entonces, lo que tiene que hacer es ejecutar funciones con más trabajo en un hilo.
fuente
Tuve el mismo problema al desarrollar una aplicación que utiliza muchos archivos png dibujables en el diseño de cuadrícula. También intenté optimizar mi código lo más posible ... pero no funcionó para mí ... Luego intenté reducir el tamaño de esos png ... y supongo que funciona absolutamente bien ... Así que mi sugerencia es reducir tamaño de los recursos extraíbles, si los hay.
fuente