Eu sou novo no ambiente SDK / API do Android. É a primeira vez que estou tentando desenhar um enredo / gráfico. Tentei executar diferentes tipos de códigos de amostra no emulador usando 3 bibliotecas gratuitas diferentes, nada está aparecendo na tela de layout. O logcat está repetindo a seguinte mensagem:
W / Trace (1378): valor inesperado de nativeGetEnabledTags: 0 I / Coreógrafo (1378): Ignorou 55 quadros! O aplicativo pode estar fazendo muito trabalho em seu encadeamento principal.
O problema não persistiu e o gráfico funcionou quando executei um código de amostra referente a uma cópia de avaliação de uma biblioteca licenciada.
android
multithreading
user2038135
fonte
fonte
Respostas:
extraído de: UI do Android: corrigindo quadros ignorados
O que isso significa é que seu código está demorando muito para processar e os quadros estão sendo ignorados por causa disso, talvez por causa de algum processamento pesado que você esteja fazendo no coração do aplicativo ou do acesso ao banco de dados ou qualquer outra coisa que faça com que o encadeamento pare por um tempo.
fonte
Como outros responderam acima, "Ignorados 55 quadros!" significa que algum processamento pesado está em seu aplicativo.
Para o meu caso, não há processo pesado no meu aplicativo. Eu dupliquei e tripliquei tudo e removi os processos que acho um pouco pesados.
Removai fragmentos, atividades e bibliotecas até restar apenas o esqueleto. Mas ainda assim o problema não desapareceu. Decidi verificar os recursos e encontrei alguns ícones e os antecedentes que utilizo são muito grandes, pois esqueci de verificar o tamanho desses recursos.
Portanto, minha sugestão é que, se nenhuma das respostas acima ajudar, você também pode verificar o tamanho dos arquivos de recursos.
fonte
Eu também tive o mesmo problema.
O meu foi um caso em que eu estava usando uma imagem de fundo que estava em drawables.That imagem em particular era de aproximadamente 130kB e foi usado durante a tela inicial e home page no meu aplicativo Android.
Solução - Acabei de mudar essa imagem específica para a pasta drawables-xxx de drawables e consegui liberar muita memória ocupada em segundo plano e os quadros que estavam pulando não estavam mais pulando.
Atualizar Use a pasta de recursos desenháveis 'nodp' para armazenar arquivos de desenhos em segundo plano.
Uma pasta drawable qualificada para densidade ou nodpi drawable terá precedência?
fonte
drawable-xxxhdpi
em vezdrawable
o que reduz drasticamente a memória usada (~ 70 por cento menos). Também é bom saber que telas com o mesmo tamanho variam em tamanho de DPI. A proporção em pixels entre eles éldpi = 1:0.75
,mdpi = 1:1
,hdpi = 1:1.5
,xhdpi = 1:2
,xxhdpi = 1:3
,xxxhdpi = 1:4
. Ao usar adrawable-xxxhdpi
pasta, você permite reduzir a escala das imagens para o tamanho da tela do seu dispositivo, o que reduz o consumo de memória e CPU.drawable
paradrawable-nodpi
impede que o aplicativo seja recebidoOut of Memory Error
.Outra causa comum de atrasos no thread da interface do usuário é o acesso SharedPreferences. Quando você chama um
PreferenceManager.getSharedPreferences
e outros métodos semelhantes pela primeira vez, o arquivo .xml associado é imediatamente carregado e analisado no mesmo encadeamento .Uma das boas maneiras de combater esse problema é acionar o primeiro carregamento de SharedPreference a partir do encadeamento em segundo plano, iniciado o mais cedo possível (por exemplo, da
onCreate
classe Application). Dessa forma, o objeto de preferência já pode ser construído no momento em que você deseja usá-lo.Infelizmente, às vezes é necessário ler um arquivo de preferência durante as fases iniciais da inicialização (por exemplo, na Atividade inicial ou até no próprio Aplicativo). Nesses casos, ainda é possível evitar o bloqueio da interface do usuário usando
MessageQueue.IdleHandler
. Faça tudo o que precisar para executar no encadeamento principal e instale o IdleHandler para executar o código assim que sua Atividade tiver sido totalmente desenhada. Nesse Runnable, você poderá acessar as SharedPreferences sem atrasar muitas operações de desenho e deixar o Choreographer infeliz.fonte
Tente usar as seguintes estratégias para melhorar o desempenho do seu aplicativo:
fonte
Eu tive o mesmo problema. O Emulador do Android funcionou perfeitamente no Android <6.0. Quando usei o emulador Nexus 5 (Android 6.0), o aplicativo funcionava muito lentamente
I/Choreographer: Skipped frames
nos logs.Portanto, resolvi esse problema alterando a
hardwareAccelerated
opção de arquivo Manifest paratrue
:fonte
Não sou especialista, mas recebi essa mensagem de depuração quando queria enviar dados do meu aplicativo Android para um servidor da web. Embora eu tenha usado a classe AsyncTask e feito a transferência de dados em segundo plano, para recuperar os dados do resultado do servidor, usei o método get () da classe AsyncTask, que torna a interface do usuário síncrona, o que significa que sua interface do usuário estará aguardando muito tempo. Portanto, meu conselho é fazer com que seu aplicativo execute todas as tarefas orientadas à rede em um thread separado.
fonte
Otimize suas imagens ... Não use imagens maiores que 100 KB ... O carregamento de imagens exige muita CPU e faz com que seu aplicativo seja interrompido.
fonte
Eu tive o mesmo problema. No meu caso, eu tinha 2 layouts relativos aninhados. O RelativeLayout sempre precisa fazer duas passagens de medida. Se você aninhar RelativeLayouts, você obtém um algoritmo de medição exponencial.
fonte
isso geralmente acontece quando você está executando processos enormes no thread principal. não há problema em ignorar quadros com menos de 200. mas se você tiver mais de 200 quadros ignorados, pode diminuir a velocidade do thread da interface do usuário do aplicativo. o que você pode fazer é executar esses processos em um novo thread chamado worker thread e, depois disso, quando você quiser acessar e executar sth com o thread da interface do usuário (por exemplo: faça algo com visualizações, findView etc ...), use o manipulador ou o runOnUiThread (Eu gosto mais disso) para exibir os resultados do processamento. isso absolutamente resolve o problema. O uso de threads de trabalho é muito útil ou deve ser usado quando se trata desses casos.
fonte
Eu tive o mesmo problema. Quando eu corri o código em outro computador, funcionou bem. No meu, no entanto, ele exibia "O aplicativo pode estar fazendo muito trabalho em seu encadeamento principal".
Resolvi meu problema reiniciando o Android studio [Arquivo -> Caches / Reiniciar invalidados -> clique em "Invalidar e reiniciar"].
fonte
No meu caso, foi porque eu acidentalmente defini um ponto de interrupção em um método. Depois que a apaguei, a mensagem foi embora e o desempenho melhorou bastante.
fonte
Meu aplicativo teve o mesmo problema. Mas não estava fazendo outra coisa senão exibir uma lista de cartões e texto. Nada rodando em segundo plano. Mas depois de alguma investigação, descobriu que a imagem definida para o fundo do cartão estava causando isso, mesmo sendo pequena (350kb). Em seguida, converti a imagem em imagens de 9 patches usando http://romannurik.github.io/AndroidAssetStudio/index.html .
Isso funcionou para mim.
fonte
Depois de fazer muita pesquisa e desenvolvimento sobre esse assunto, obtive a solução,
No meu caso, estou usando o Serviço que será executado a cada 2 segundos e, com o runonUIThread, fiquei imaginando que o problema estava lá, mas não ocorreu. A próxima edição que eu encontrei é que estou usando uma imagem grande no App de maio e esse é o problema.
Eu removi as imagens e defina novas imagens.
Conclusão: - Examine o seu código: existe algum arquivo bruto que você esteja usando é de tamanho grande.
fonte
Leia primeiro o aviso. Diz mais carga no segmento principal. Então, o que você precisa fazer é apenas executar funções com mais trabalho em um thread.
fonte
Eu tive o mesmo problema ao desenvolver um aplicativo que usa muitos arquivos png desenháveis no layout da grade. Eu também tentei otimizar meu código o máximo possível .. mas não funcionou para mim .. Então eu tentei reduzir o tamanho desses png .. e acho que está funcionando absolutamente bem .. Então, minha sugestão é reduzir tamanho dos recursos desenháveis, se houver.
fonte