Android travou motivo

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)

Acho que você gosta

Origin blog.csdn.net/liu362732346/article/details/102747681
Recomendado
Clasificación