Android Profiler é um conjunto de ferramentas integrado ao Android Studio para monitoramento de desempenho de aplicativos em tempo real. Ele permite rastrear a carga da CPU, consumo de memória, tráfego de rede e consumo de energia sem instalar bibliotecas de terceiros. De acordo com o Android Developers, o profileador está integrado diretamente na IDE e fornece métricas com precisão de milissegundos para qualquer processo no dispositivo conectado.
Principais pontos
Android Profiler é um componente do Android Studio que substituiu os antigos Android Monitor e DDMS. Ele fornece uma interface unificada para profilear todos os aspectos do aplicativo: CPU Profiler para análise do processador, Memory Profiler para trabalho com memória, Network Profiler para requisições de rede e Energy Profiler para consumo de energia. Os dados são coletados automaticamente ao iniciar o aplicativo através do Android Studio.
O profileador funciona tanto em emulador quanto em dispositivo físico conectado por USB. De acordo com o Google I/O 2023, o Android Profiler é usado em mais de 70% dos projetos Android e é considerado a ferramenta padrão de diagnóstico de desempenho. A principal vantagem sobre soluções de terceiros é a integração zero: não é necessário adicionar dependências no build.gradle ou modificar o código do aplicativo.
A arquitetura do Android Profiler é baseada no Perfetto — o rastreador de sistema do Android que coleta dados no nível do kernel e do aplicativo. O Perfetto garante sobrecarga mínima (menos de 1% de CPU) e suporta gravação de longo prazo de até 30 minutos. Isso permite profilear não apenas operações rápidas, mas também cenários longos — transições entre telas, sincronização em segundo plano, consumo de memória durante uma hora de uso.
O profileador coleta quatro tipos de dados: CPU — carga de cada núcleo e thread, Memory — Java Heap, Native Heap, Stack, Graphics, Network — todas as requisições de entrada e saída, Energy — categorias de consumo de energia (Idle, Light, Medium, Heavy). Os dados são sincronizados na linha do tempo — é possível ver simultaneamente como a mudança da CPU afeta a Memory e o consumo de energia.
CPU Profiler mostra a carga do processador em tempo real na linha do tempo, dividida por threads do aplicativo. Cada thread é representada por uma linha ou área colorida — quanto mais larga a área, mais tempo de processador a thread ocupa. Áreas vermelhas significam trabalho do aplicativo, azuis — chamadas de sistema, cinzas — espera.
Para análise detalhada, o CPU Profiler suporta três modos de gravação: Trace Java Methods (rastreamento de todos os métodos Java), Trace C/C++ Functions (rastreamento de funções nativas NDK) e Sample Java Methods (amostragem, modo recomendado). A amostragem oferece a menor sobrecarga e é adequada para profileamento diário, enquanto o rastreamento completo é para encontrar problemas complexos.
// Exemplo: a análise do CPU Profiler mostrará este método como bottleneck
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// O CPU Profiler mostrará alta carga de CPU em inBackgroundThread
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// Recomendação após o profileamento:
// computeHeavyTransformation leva 80% do tempo — armazenamos o resultado em cache
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
Após a gravação, o CPU Profiler mostra a Top-Down Tree — árvore de chamadas com tempo de execução de cada método. Preste atenção na coluna Self Time/Total: se o Self Time de um método for maior que 16 ms e ele for chamado da thread de UI — é uma queda de quadro garantida. A solução é mover cálculos pesados para uma thread em segundo plano via Dispatchers.IO ou Default.
Sample Java Methods — modo recomendado para profileamento diário com sobrecarga de 3–5%. Trace Java Methods — rastreamento completo de cada chamada, sobrecarga de até 15%, usado para gravações curtas (5–10 segundos). Trace C/C++ Functions — rastreamento de código NDK via Linux Perf, indispensável para análise de jogos e bibliotecas em C++. Alterne os modos dependendo do tipo de problema.
Memory Profiler monitora todas as categorias de memória do aplicativo: Java Heap (objetos JVM), Native Heap (alocações C/C++ via JNI), Stack (pilhas de threads) e Graphics (texturas, buffers GPU). A visualização principal é o gráfico temporal de consumo de memória, onde cada categoria é mostrada em sua própria cor. Se o gráfico não diminuir após a coleta de lixo — suspeite de vazamento.
Para encontrar vazamentos, use a função Capture Heap Dump. No momento do dump, o Android Profiler pausa o aplicativo por ~100 ms e cria um arquivo HPROF — um snapshot completo de todos os objetos vivos do Java Heap. Após abrir o dump, você pode ordenar objetos por Retained Size (volume de memória que será liberado ao remover o objeto) e procurar instâncias de Activity, Fragment ou Bitmap que deveriam ter sido destruídas.
De acordo com o Google I/O 2022, o Memory Profiler em conjunto com o LeakCanary cobre 95% dos cenários de detecção de vazamentos de memória no Android. O LeakCanary funciona automaticamente — detecta vazamentos em segundo plano. O Memory Profiler é necessário para análise manual: você vê o quadro completo das alocações, não apenas vazamentos.
| Categoria de memória | Descrição | Tamanho típico |
|---|---|---|
| Java Heap | Heap JVM: objetos Kotlin/Java | 5–200 MB |
| Native Heap | Alocações via JNI, NDK | 1–100 MB |
| Graphics | Texturas, buffers GPU | 10–200 MB |
| Stack | Pilhas de todas as threads | 1–10 MB |
Após capturar o dump, ordene os objetos por Retained Size — é o volume de memória que será liberado ao remover o objeto. Procure instâncias de Activity, Fragment e Bitmap com grande Retained Size que não deveriam estar na memória. Vá para a aba Reference Tree para ver a cadeia de referências que mantém o objeto — geralmente é um campo estático de singleton ou um callback não limpo. Uma métrica importante é o Allocation rate (número de alocações por segundo). Se o allocation rate exceder 10.000 objetos/s, o aplicativo gasta muito tempo criando e removendo objetos temporários, o que sobrecarrega o GC e causa microtravamentos. Nesse caso, use a ferramenta View Inspector e encontre locais com criação frequente de objetos em loops.
Network Profiler exibe todas as requisições de rede do aplicativo em tempo real na linha do tempo. Cada requisição é mostrada como uma barra horizontal — seu comprimento corresponde ao tempo de execução, a cor — ao tipo de requisição (GET, POST, PUT, DELETE). A rolagem da escala permite ver como as requisições estão distribuídas no tempo e se estão duplicadas.
Todas as bibliotecas populares são suportadas: OkHttp, Retrofit, Volley, Ktor. Para Ktor e OkHttp, o profileador mostra a pilha completa de chamadas, incluindo interceptadores e conversores. Para cada requisição estão disponíveis Request Headers e Response Headers, corpo da resposta (até 1 MB), código de status e duração.
Problemas típicos identificados pelo Network Profiler: ausência de cache (a mesma URL é solicitada a cada abertura), requisições duplicadas (dois componentes carregam os mesmos dados simultaneamente), tamanho excessivo da resposta (o servidor envia 5 MB quando precisa de 50 KB). O Network Profiler ajuda a ver esses problemas literalmente em um olhar na linha do tempo.
Para simular redes lentas, use o Network Conditioning no Android Studio — ele permite limitar a largura de banda para 3G/2G e adicionar latência. Isso é criticamente importante para testar o comportamento do aplicativo em más condições de rede, especialmente para aplicativos que operam em regiões com internet instável.
Energy Profiler avalia o impacto do aplicativo na carga da bateria com base nos dados do Perfetto. A ferramenta não mede o consumo real em miliamperes, mas classifica cada operação em uma de cinco categorias de consumo de energia: Idle, Light, Medium, High e Overloaded. A linha do tempo do Energy Profiler é destacada por cores: verde (carga leve), amarelo (média), vermelho (alta).
Principais causas de zonas vermelhas: WakeLock (o aplicativo mantém o processador ativo), Location GPS (solicitações constantes de coordenadas com alta precisão), Conexões Keep-Alive (trocas frequentes de dados com o servidor), grandes transferências de dados (envio de arquivos, streaming). O Energy Profiler mostra exatamente qual operação em qual momento causou o pico de consumo de energia.
De acordo com o Android Developers, um aplicativo típico não deve passar mais de 5% do tempo na categoria High. Se o Energy Profiler mostrar zonas vermelhas por mais de 10% do tempo de profileamento — o aplicativo não passará na revisão pelo critério de Battery Drain. Recomendação — usar WorkManager para tarefas em segundo plano, limitar solicitações de Location à precisão mínima necessária e agregar requisições de rede em lotes.
Iniciar o Android Profiler é feito com um clique: no Android Studio, abra View → Tool Windows → Profiler ou clique duas vezes no ícone do Profiler no painel direito. Após iniciar o aplicativo no dispositivo conectado, o Android Studio se conectará automaticamente ao processo e começará a coletar dados. Na linha do tempo, os gráficos de CPU, Memory, Network e Energy aparecerão imediatamente.
Para análise detalhada, selecione a guia desejada (CPU, Memory, Network ou Energy) e inicie a gravação. Para CPU, recomendo o modo Sample Java Methods com duração de gravação de 30 segundos — isso é suficiente para um cenário típico. Para Memory — dump do heap após a execução do cenário (Capture Heap Dump). Para Network, a gravação é iniciada automaticamente, basta pressionar o botão Stop após concluir o cenário.
Após parar a gravação, exporte os dados: File → Save As salva toda a sessão em um arquivo .perf. Isso é conveniente para comparar métricas antes e depois da otimização. Crie uma sessão de baseline na primeira versão estável e compare cada nova sessão com ela — esta é a única maneira de avaliar objetivamente as mudanças de desempenho.
O Android Profiler pode ser executado a partir da linha de comando via Android Studio CLI e Firebase Test Lab. O Firebase Test Lab suporta profileamento de desempenho como parte dos testes de UI: você obtém métricas de CPU, Memory e Network junto com o resultado do teste. Configure o pipeline para que, quando as métricas caírem 10% em relação ao baseline, o pipeline de CI seja bloqueado até a verificação pelo desenvolvedor.
Perguntas frequentes
O impacto é mínimo. O Android Profiler usa o Perfetto para coleta de dados, que adiciona menos de 1% de sobrecarga de CPU. No modo Sample Java Methods, a sobrecarga é de cerca de 3–5%, o que é insignificante para profileamento de cenários. O rastreamento completo de métodos pode dar sobrecarga de até 15%, por isso é usado apenas para gravações curtas.
Sim, os traces do sistema podem ser gravados via Perfetto CLI diretamente do dispositivo: adb shell perfetto --out /data/local/tmp/trace.perf. Em seguida, abra o arquivo na interface do Perfetto UI (ui.perfetto.dev) ou importe no Android Studio para visualização com a marcação completa do aplicativo.
O Android Profiler é uma ferramenta de sistema que não requer configuração de proxy. Mostra as requisições diretamente na IDE no contexto de desempenho. O Charles Proxy é um servidor proxy externo que fornece análise mais detalhada (interceptação de tráfego, modificação de requisições, reenvio). Para profileamento de desempenho, use o Android Profiler; para análise de contratos de API, use o Charles.
Faça um dump do heap antes de executar o cenário (por exemplo, antes de abrir a Activity). Execute o cenário — abra a Activity e feche-a. Faça um segundo dump. Compare o número de instâncias vivas de Activity: se no segundo dump houver mais — vazamento. Ordene por Retained Size, encontre Activities extras e veja a Reference Tree para determinar a causa.
O Energy Profiler requer suporte a Power Profiles no nível do dispositivo e Android 8.0+. Em emuladores e algumas ROMs (especialmente chinesas), os dados podem estar ausentes. A solução é profilear o consumo de energia em dispositivos de referência Pixel ou Samsung com firmware Android puro.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também