Ecco una spiegazione più dettagliata:
Choreographer consente alle app di connettersi al vsync e di sincronizzare correttamente le cose per migliorare le prestazioni.
Le animazioni di visualizzazione Android utilizzano internamente Choreographer per lo stesso scopo: programmare correttamente le animazioni e possibilmente migliorare le prestazioni.
Dal momento che Choreographer viene informato di tutti gli eventi vsync, posso dire se uno dei Runnable passati insieme a Choreographer.post * apis non finisce in un frame nel tempo, causando il salto dei frame.
Secondo la mia comprensione, Coreografo può rilevare solo il salto della cornice. Non ha modo di dire perché questo accada.
Il messaggio "L'applicazione potrebbe fare troppo lavoro sul suo thread principale." potrebbe essere fuorviante.
fonte:
significato dei messaggi coreografi in Logcat
Perché dovresti essere preoccupato
Quando questo messaggio appare sull'emulatore Android e il numero di frame saltati è abbastanza piccolo (<100), allora puoi scommettere in sicurezza che l'emulatore è lento, cosa che accade quasi sempre. Ma se il numero di frame saltato e grande e nell'ordine di 300+, allora potrebbe esserci qualche problema serio con il tuo codice. I dispositivi Android sono disponibili in una vasta gamma di hardware a differenza dei dispositivi iOS e Windows. La RAM e la CPU variano e se desideri prestazioni e un'esperienza utente ragionevoli su tutti i dispositivi, devi risolvere questo problema. Quando i frame vengono saltati, l'interfaccia utente è lenta e ritardata, il che non è un'esperienza utente desiderabile.
Come sistemarlo
Per risolvere questo problema è necessario identificare i nodi in cui è presente o che può verificarsi una lunga durata dell'elaborazione. Il modo migliore è eseguire tutta l'elaborazione, non importa quanto piccola o grande in un thread sia separata dal thread dell'interfaccia utente principale. Che si tratti di accedere ai dati dal database SQLite o fare alcuni calcoli matematici o semplicemente ordinare un array - Fallo in un thread diverso
Ora c'è un problema qui, creerai un nuovo thread per fare queste operazioni e quando eseguirai l'applicazione, si bloccherà dicendo "Solo il thread originale che ha creato una gerarchia di viste può toccare le sue viste". Devi sapere questo fatto che l'interfaccia utente in Android può essere modificata solo dal thread principale o dal thread dell'interfaccia utente. Qualsiasi altro thread che tenta di farlo, non riesce e si arresta in modo anomalo con questo errore. Quello che devi fare è creare un nuovo Runnable all'interno di runOnUiThread e all'interno di questo runnable dovresti fare tutte le operazioni che coinvolgono l'interfaccia utente. Trova un esempio qui .
Quindi abbiamo Thread e Runnable per l'elaborazione dei dati dal thread principale, cos'altro? C'è AsyncTask in Android che consente di eseguire processi a lungo termine sul thread dell'interfaccia utente. Questo è il più utile quando le tue applicazioni sono guidate da dati o basate su API web o usi UI complesse come quelle costruite usando Canvas. Il potere di AsyncTask è che consente di fare le cose in background e una volta terminata l'elaborazione, puoi semplicemente eseguire le azioni richieste sull'interfaccia utente senza causare alcun effetto ritardato. Ciò è possibile perché AsyncTask deriva dal thread dell'interfaccia utente di Activity: tutte le operazioni che esegui sull'interfaccia utente tramite AsyncTask vengono eseguite è un thread diverso dal thread dell'interfaccia utente principale, nessun ostacolo all'interazione dell'utente.
Quindi questo è ciò che devi sapere per rendere le applicazioni Android fluide e per quanto ne so ogni principiante riceve questo messaggio sulla sua console.