Para oferecer uma experiência de app tranquila, estável e eficiente em termos de bateria, é necessário identificar e resolver gargalos comuns de desempenho em estabilidade, renderização da interface, consumo de memória, trabalho em segundo plano, latência de inicialização e otimização de build.
Os guias nesta seção explicam o comportamento da plataforma Android para
cada tipo de problema e mostram como diagnosticar, criar perfis e corrigir
usando ferramentas como o Android Studio Profiler, Perfetto, Logcat e
ApplicationExitInfo.
Estabilidade
- ANRs:diagnostique e corrija erros do tipo "O app não está respondendo" (ANR) causados por linhas de execução de interface bloqueadas, E/S da linha de execução principal, disputa de bloqueio ou broadcast receivers lentos.
- Falhas:leia rastreamentos de pilha, inspecione a saída do Logcat e evite exceções não gerenciadas e sinais nativos.
Renderização e inicialização
- Renderização lenta:identifique e corrija frames de interface descartados ou congelados (
>16mse>700ms) causados por layouts caros, vinculações ou bloqueios da linha de execução principal. - Sessões lentas (somente jogos):meça o ritmo de frames com
SurfaceFlingere otimize as taxas de frames do jogo usando o Android Frame Pacing (Swappy), o Vulkan e o Android Dynamic Performance Framework (ADPF). - Tempo de inicialização do app:entenda os detalhes internos de inicialização a frio, com estado salvo e a quente, meça o tempo para exibição inicial (TTID) e o tempo para exibição total (TTFD) e otimize o trabalho de inicialização.
Gerenciamento de memória
- Low memory killers (LMKs):entenda como o daemon Android Low Memory Killer (
lmkd) prioriza processos viaoom_adj_scoree crie um perfil do consumo de memória no Android Studio, Unity e Unreal Engine. - Uso da memória (RSS anônimo e espaço de troca):meça e reduza o consumo de memória do app (tamanho do conjunto residente anônimo e espaço de troca) nos estados de primeiro plano, serviço e segundo plano.
- Uso da memória de bitmap:diagnostique alocações de bitmap grandes ou com vazamento e libere buffers gráficos quando os componentes da interface forem para o segundo plano.
Bateria e trabalho em segundo plano
- Wake locks em excesso:evite
manter wake locks parciais por longos períodos e migre tarefas em segundo plano
para
WorkManagerouJobScheduler. - Wake locks parciais travados:garanta que todos os wake locks parciais adquiridos sejam liberados corretamente em todos os caminhos de execução e de erros.
- Ativações excessivas:reduza as ativações exatas de alarmes e agrupe ou adie o trabalho em segundo plano programado.
- Buscas excessivas por Wi-Fi em segundo plano:minimize a frequência de buscas por Wi-Fi em segundo plano e use APIs de localização e conectividade passivas ou em lote.
- Uso excessivo da rede em segundo plano:
faça transferências em lote e adie as transferências de rede móvel em segundo plano usando restrições
WorkManager. - Uso excessivo da bateria:diagnostique o consumo excessivo da bateria em dispositivos móveis e Wear OS criando perfis de atividade da CPU, do sensor e do rádio.
Permissões e otimização de build
- Negações de permissão:solicite permissões de execução no contexto e explique claramente aos usuários o motivo da permissão.
- Otimização de código DEX:configure regras de redução, ofuscação e otimização do R8 para reduzir o tamanho do DEX e melhorar o desempenho de execução.