Para entender a causa do atraso, você precisa entender o princípio de 16ms primeiro
https://www.cnblogs.com/upwgh/p/10897576.html
1. O princípio de 16ms
Devido à estrutura especial do olho humano, para taxas de quadros abaixo de 60fps, haverá um fenômeno de lag, então aparece o princípio de 16ms (1000ms / 60fps = 16ms), ou seja, a página deve ser atualizada a cada 16ms.
O sistema Android envia um sinal vsync a cada 16 ms para acionar a renderização da IU. A tela é atualizada aproximadamente 60 vezes em 1s, e 60 frames de dados são exibidos.
fps: a taxa de quadros da imagem transmitida por segundo, quanto maior a taxa de quadros, mais o fluxo da imagem e vice-versa
2. Causas de Caton
Falamos sobre o princípio de 16 ms acima, então que impacto o princípio de 16 ms tem em nossa IU?
Devido ao princípio de 16 ms, nosso monitor exibirá a página em duas situações:
1. As etapas acima são concluídas em 16 ms, verdadeiro → exibido diretamente no visor.
2. As etapas acima não são concluídas em 16 ms (talvez porque o tempo de cálculo da CPU seja muito longo ou o tempo de renderização da GPU seja muito longo, e todo o processo eventualmente exceda 16 ms), falso -> sincronização vertical aguarda o próximo quadro para completo.
Explique o mecanismo de sincronização vertical: por exemplo, o primeiro quadro é renderizado em 16 ms e exibido, e o segundo quadro excede 16 ms no fluxo de processamento acima e não é concluído em 16 ms, então a tela não exibirá o segundo. Os dados do quadro ainda exibe apenas os dados do primeiro quadro e, em seguida, o terceiro quadro é processado. Os dados do terceiro quadro são processados em 16 ms. O processo acima é concluído. Então, o resultado é que a tela exibirá os dados do segundo quadro e o terceiro quadro. Os dados são exibidos juntos (se houver uma perda de quadros em um determinado lugar, a probabilidade afetará o desenho subsequente e a perda de quadros ocorrerá). Se o poder de computação da CPU da calculadora e o poder de renderização de o GPU é pobre, então haverá o que chamamos de fenômeno de atraso da interface do usuário. (Usando LOL para dar um exemplo, por exemplo, não completamos 1-10 quadros em 16 ms (durante a equipe, a IU é muito complicada), e o 11º quadro foi concluído em 16 ms (depois de jogar com o time, vá para casa e mergulhe na água da nascente). Os dados dos quadros de 1 a 11 serão exibidos. Neste momento, a sensação é que várias habilidades estão surgindo em um flash)
Depois de ler a explicação acima, há um sentimento claro? De um modo geral, a taxa de quadros é muito baixa. Devido à limitação do mecanismo de sincronização vertical, as imagens de nossos quadros anteriores não podem ser renderizadas até que um determinado quadro seja nossa taxa de quadros. É normal, neste momento, os primeiros frames serão renderizados juntos, o que causará o fenômeno de gagueira visual.
Terceiro, a otimização da gagueira causada por desenho excessivo
2. Ferramentas de detecção de overdraw
Opções do desenvolvedor -> Depurar overdraw do GPU -> Mostrar área de overdraw
As cores primárias - não exageradas - os pixels nesta parte são desenhados apenas uma vez na tela.
Azul - 1 overdraw - os pixels nesta parte são desenhados na tela apenas duas vezes.
Verde - 2 overdraw - os pixels nesta parte são desenhados na tela apenas três vezes.
Rosa - 3 overdraw - os pixels nesta parte são desenhados na tela apenas quatro vezes.
Vermelho - 4 overdraw - os pixels nesta parte foram desenhados na tela apenas cinco vezes.
Nosso objetivo é minimizar o vermelho e ver mais azul! ! !
3. Como evitar overdraw
1) Evite aninhamento excessivo de níveis de IU
2) Reduza as configurações de fundo desnecessárias (se o fundo do nó raiz é aceitável, se o fundo do tema do sistema é aceitável, etc.)
3) Use a tag de mesclagem para reduzir o nível de aninhamento do layout
4) Use ConstraintLayout para substituir layouts aninhados comuns e reduzir os níveis de layout
5) Ao personalizar a visualização, use os métodos clipRect e clipPath do Canvas para limitar a área de desenho da Visualização (a área de cobertura não precisa ser desenhada)