Hier ist eine ausführlichere Erklärung:
Der Choreographer ermöglicht es Apps, sich mit der VSync zu verbinden und Dinge ordnungsgemäß zu timen, um die Leistung zu verbessern.
Android-Ansichtsanimationen verwenden intern ebenfalls den Choreographer zu demselben Zweck: um die Animationen korrekt zu timen und möglicherweise die Leistung zu verbessern.
Da der Choreographer über jedes VSync-Ereignis informiert wird, kann er feststellen, ob eines der Runnables, die über die Choreographer.post* APIs übergeben werden, nicht innerhalb eines Frames beendet wird, was dazu führt, dass Frames übersprungen werden.
Meines Erachtens kann der Choreographer nur das Überspringen von Frames erkennen. Er hat keine Möglichkeit zu erkennen, warum dies passiert.
Die Meldung "Die Anwendung führt möglicherweise zu viel Arbeit auf ihrem Hauptthread aus." könnte irreführend sein.
Quelle : Bedeutung von Choreographer-Meldungen in Logcat
Warum Sie besorgt sein sollten
Wenn diese Meldung im Android-Emulator erscheint und die Anzahl der übersprungenen Frames relativ gering ist (<100), können Sie davon ausgehen, dass der Emulator langsam ist – was fast immer der Fall ist. Aber wenn die Anzahl der übersprungenen Frames groß ist und im Bereich von 300+ liegt, dann gibt es möglicherweise ernsthafte Probleme mit Ihrem Code. Android-Geräte gibt es in einer Vielzahl von Hardwarevarianten im Gegensatz zu iOS- und Windows-Geräten. Der RAM und die CPU variieren und wenn Sie eine vernünftige Leistung und Benutzererfahrung auf allen Geräten wollen, dann müssen Sie das beheben. Wenn Frames übersprungen werden, ist die Benutzeroberfläche langsam und ruckelt, was keine wünschenswerte Benutzererfahrung ist.
Wie man es behebt
Um dies zu beheben, muss man die Stellen identifizieren, an denen eine lange Verarbeitungsdauer auftritt oder auftreten kann. Der beste Weg ist, alle Verarbeitungsschritte, egal ob klein oder groß, in einem Thread durchzuführen, der sich vom Haupt-UI-Thread unterscheidet. Sei es der Zugriff auf Daten aus der SQLite-Datenbank, das Durchführen von komplexen Berechnungen oder das Sortieren eines Arrays – tun Sie dies in einem anderen Thread.
Es gibt jedoch einen Haken: Sie werden einen neuen Thread erstellen, um diese Operationen durchzuführen, und wenn Sie Ihre Anwendung ausführen, wird sie mit der Meldung "Nur der ursprüngliche Thread, der eine View-Hierarchie erstellt hat, kann die Views berühren" abstürzen. Sie müssen wissen, dass die UI in Android nur vom Hauptthread oder dem UI-Thread geändert werden kann. Jeder andere Thread, der versucht, dies zu tun, scheitert und stürzt mit diesem Fehler ab. Was Sie tun müssen, ist, einen neuen Runnable innerhalb von runOnUiThread zu erstellen und innerhalb dieses Runnable sollten alle Operationen, die die UI betreffen, durchgeführt werden. Finden Sie ein Beispiel hier.
Daher haben wir einen Thread und ein Runnable für die Verarbeitung außerhalb des Hauptthreads, gibt es noch etwas? In Android gibt es AsyncTask, mit dem Sie langwierige Prozesse auf dem UI-Thread ausführen können. Dies ist besonders nützlich, wenn Ihre Anwendungen datengesteuert sind, Web-APIs verwenden oder komplexe Benutzeroberflächen wie diejenigen, die mit Canvas erstellt wurden, nutzen. Die Stärke von AsyncTask liegt darin, dass es ermöglicht, Dinge im Hintergrund zu erledigen und sobald die Verarbeitung abgeschlossen ist, können Sie einfach die erforderlichen Aktionen auf der UI durchführen, ohne dass es zu Verzögerungen kommt. Dies ist möglich, da der AsyncTask sich vom Aktivitäts-UI-Thread ableitet – alle Operationen, die Sie über AsyncTask auf der UI durchführen, erfolgen in einem anderen Thread als dem Haupt-UI-Thread, ohne die Benutzerinteraktion zu beeinträchtigen.
Daher wissen Sie nun, was Sie tun müssen, um reibungslose Android-Anwendungen zu erstellen, und soweit ich weiß, bekommt jeder Anfänger diese Meldung auf seiner Konsole angezeigt.