Aqui está uma explicação mais detalhada:
O Choreographer permite que os aplicativos se conectem ao vsync e cronometre corretamente as coisas para melhorar o desempenho.
As animações da visualização Android usam o Choreographer internamente para o mesmo objetivo: cronometrar adequadamente as animações e possivelmente melhorar o desempenho.
Como o Choreographer é informado sobre todos os eventos vsync, posso dizer se um dos Runnables transmitidos pelo Choreographer.post * apis não termina no tempo de um quadro, fazendo com que os quadros sejam ignorados.
No meu entendimento, o Coreógrafo pode detectar apenas o quadro pulando. Não tem como dizer por que isso acontece.
A mensagem "O aplicativo pode estar executando muito trabalho em seu encadeamento principal". pode ser enganoso.
source:
Significado das mensagens do Choreographer no Logcat
Por que você deveria estar preocupado
Quando essa mensagem aparece no emulador do Android e o número de quadros ignorados é bastante pequeno (<100), você pode apostar com segurança se o emulador está lento - o que acontece quase sempre. Mas se o número de quadros saltados e grandes e da ordem de mais de 300, pode haver sérios problemas com seu código. Os dispositivos Android possuem uma vasta gama de hardware, diferente dos dispositivos iOS e Windows. A RAM e a CPU variam e, se você deseja um desempenho razoável e uma experiência do usuário em todos os dispositivos, precisará corrigir isso. Quando os quadros são ignorados, a interface do usuário é lenta e lenta, o que não é uma experiência do usuário desejável.
Como corrigi-lo
A correção disso requer a identificação de nós onde existe ou possivelmente pode ocorrer uma longa duração do processamento. A melhor maneira é fazer todo o processamento, não importa quão pequeno ou grande em um thread seja separado do thread principal da interface do usuário. Portanto, seja acessando o formulário de dados SQLite Database ou fazendo algumas matemáticas graves ou simplesmente classificando uma matriz - Faça isso em um thread diferente
Agora há um problema aqui: você criará um novo thread para executar essas operações e, quando executar o aplicativo, ele falhará dizendo "Somente o thread original que criou uma hierarquia de visualizações pode tocar suas visualizações". Você precisa saber que a UI no Android pode ser alterada apenas pelo thread principal ou pelo thread da UI. Qualquer outro encadeamento que tente fazer isso falha e trava com esse erro. O que você precisa fazer é criar um novo Runnable dentro do runOnUiThread e dentro desse executável, você deve executar todas as operações que envolvem a interface do usuário. Encontre um exemplo aqui .
Portanto, temos Thread e Runnable para processar dados fora do Thread principal, o que mais? Existe o AsyncTask no Android, que permite realizar processos demorados no thread da interface do usuário. Isso é mais útil quando os aplicativos são orientados a dados ou APIs da Web ou usam UIs complexas como as criadas usando o Canvas. O poder do AsyncTask é que ele permite fazer coisas em segundo plano e, assim que você terminar o processamento, poderá simplesmente executar as ações necessárias na interface do usuário sem causar nenhum efeito de atraso. Isso é possível porque o AsyncTask deriva do thread da UI da Activity - todas as operações realizadas na UI via AsyncTask são feitas em um thread diferente do thread da UI principal, sem impedimentos para a interação do usuário.
Portanto, é isso que você precisa saber para criar aplicativos Android suaves e, até onde eu sei, todo iniciante recebe essa mensagem em seu console.