Voici une explication plus détaillée:
Le chorégraphe permet aux applications de se connecter au vsync et de planifier correctement les choses pour améliorer les performances.
Les animations de vue Android utilisent en interne Choreographer dans le même but: chronométrer correctement les animations et éventuellement améliorer les performances.
Étant donné que Choreographer est informé de tous les événements vsync, je peux savoir si l'un des Runnables transmis par le Choreographer.post * apis ne se termine pas en une seule image, entraînant l'omission d'images.
À ma connaissance, le chorégraphe ne peut détecter que le saut de trame. Il n'a aucun moyen de dire pourquoi cela se produit.
Le message "L'application fait peut-être trop de travail sur son thread principal." pourrait être trompeur.
source:
Signification des messages du chorégraphe dans Logcat
Pourquoi vous devriez vous inquiéter
Lorsque ce message apparaît sur l'émulateur Android et que le nombre d'images sautées est assez petit (<100), vous pouvez parier que l'émulateur est lent - ce qui se produit presque tout le temps. Mais si le nombre d'images sautées et grandes et de l'ordre de 300+, il peut y avoir de sérieux problèmes avec votre code. Les appareils Android sont livrés dans une vaste gamme de matériel contrairement aux appareils iOS et Windows. La RAM et le CPU varient et si vous voulez des performances et une expérience utilisateur raisonnables sur tous les appareils, vous devez résoudre ce problème. Lorsque les trames sont ignorées, l'interface utilisateur est lente et décalée, ce qui n'est pas une expérience utilisateur souhaitable.
Comment le réparer
Pour résoudre ce problème, il faut identifier les nœuds où il y a ou peut se produire une longue durée de traitement. La meilleure façon est de faire tout le traitement, peu importe sa taille, dans un thread séparé du thread d'interface utilisateur principal. Donc, que ce soit en accédant au formulaire de données SQLite Database ou en faisant des calculs hardcore ou simplement en triant un tableau - Faites-le dans un thread différent
Maintenant, il y a un hic ici, vous allez créer un nouveau thread pour effectuer ces opérations et lorsque vous exécutez votre application, il se bloque en disant "Seul le thread d'origine qui a créé une hiérarchie de vues peut toucher ses vues". Vous devez savoir que l'interface utilisateur dans Android peut être modifiée uniquement par le thread principal ou le thread d'interface utilisateur. Tout autre thread qui tente de le faire, échoue et se bloque avec cette erreur. Ce que vous devez faire est de créer un nouveau Runnable à l'intérieur de runOnUiThread et à l'intérieur de ce runnable, vous devez effectuer toutes les opérations impliquant l'interface utilisateur. Trouvez un exemple ici .
Nous avons donc Thread et Runnable pour le traitement des données hors du thread principal, quoi d'autre? Il y a AsyncTask dans Android qui permet de faire des processus de longue durée sur le thread d'interface utilisateur. C'est le plus utile lorsque vos applications sont pilotées par les données ou les API Web ou que vous utilisez des interfaces utilisateur complexes comme celles créées à l'aide de Canvas. La puissance d'AsyncTask est qu'elle permet de faire des choses en arrière-plan et une fois que vous avez terminé le traitement, vous pouvez simplement effectuer les actions requises sur l'interface utilisateur sans provoquer d'effet de retard. Cela est possible car AsyncTask dérive lui-même du thread d'interface utilisateur de l'activité - toutes les opérations que vous effectuez sur l'interface utilisateur via AsyncTask sont effectuées est un thread différent du thread d'interface utilisateur principal, aucune entrave à l'interaction avec l'utilisateur.
C'est donc ce que vous devez savoir pour créer des applications Android fluides et pour autant que je sache, chaque débutant reçoit ce message sur sa console.