Sobes.tech
Middle

O que significa se o perfilador mostrar que um quadro levou 120 milissegundos?

sobes.tech IA

Resposta da IA

Isto significa que a renderização deste quadro (desenho e exibição na tela) levou 120 milissegundos.

A interface Android atualiza-se a uma frequência de aproximadamente 60 quadros por segundo, o que corresponde a cerca de 16 milissegundos por quadro (1000 ms / 60 quadros ≈ 16,67 ms/quadro).

Se um quadro demora 120 ms, excede significativamente o tempo permitido e provoca saltos de quadros, que são percebidos visualmente como "atraso" ou "lag" na interface do utilizador.

As causas podem variar:

  • Demasiado trabalho no thread principal (UI Thread): Operações longas, como pedidos de rede, trabalho com bases de dados, cálculos complexos ou processamento intensivo de imagens, são realizadas no thread principal.
  • Redesenho (Overdraw): Demasiadas camadas de desenho num único píxel de ecrã.
  • Layouts complexos (Layout Complexity): Profundidade na hierarquia de ViewGroups ou uso de layouts não padrão que requerem muito trabalho para medir e posicionar os elementos.
  • Grande quantidade de componentes View: Desenhar demasiados View num único quadro, especialmente em listas (RecyclerView, ListView), se não estiverem otimizados.
  • Problemas com "garbage" (Garbage Collection): Pausas frequentes ou prolongadas para a recolha de lixo.

Para resolver o problema, é necessário usar o Profiler do Android Studio para uma análise mais detalhada do quadro e identificar as secções específicas do código ou operações que consomem muito tempo.

Exemplos de otimização:

  • Mover operações longas para threads em segundo plano (usando Kotlin Coroutines, RxJava, ExecutorService, etc.).
  • Otimizar a hierarquia de layouts.
  • Usar ConstraintLayout.
  • Otimizar listas (RecyclerView): usar ViewHolder, gerir corretamente os elementos, fazer pooling de Views.
  • Combater o Overdraw (com a ferramenta GPU Overdraw).
  • Otimizar o trabalho com imagens (usando bibliotecas como Coil, Glide, Picasso).