LeakCanary para Kotlin: guia completo com exemplos práticos
No desenvolvimento Android, o gerenciamento de memória é uma das tarefas mais críticas. Vazamentos de memória (memory leaks) ocorrem quando um objeto que não é mais necessário para o aplicativo continua sendo mantido na memória devido a referências implícitas. Isso leva ao aumento do consumo de memória, pausas frequentes do GC (Garbage Collection), lentidão e, por fim, ao OutOfMemoryError e à falha do aplicativo. O LeakCanary é uma biblioteca de código aberto da Square que detecta automaticamente vazamentos de memória em aplicativos Android escritos em Java e Kotlin.
Por que usar? Depurar vazamentos manualmente é um processo complexo e demorado, que exige um conhecimento profundo da JVM, análise de heap dumps e uso de profilers (Android Studio Profiler, MAT). O LeakCanary assume todo esse trabalho: ele monitora automaticamente o ciclo de vida de Activities, Fragments, ViewModels e outros componentes. Se algum deles não for coletado pelo garbage collector após ser destruído, a biblioteca cria um heap dump, analisa e gera um relatório completo com a cadeia exata de referências que causou o vazamento. Isso permite que os desenvolvedores encontrem e corrijam problemas rapidamente, sem perder horas em análises manuais.
O LeakCanary é integrado ao aplicativo como uma biblioteca e funciona em segundo plano. Ele não afeta a experiência do usuário, mas fornece ao desenvolvedor (em builds de debug) notificações e logs detalhados. A partir da versão 2.x, a biblioteca foi totalmente reescrita em Kotlin, tornando-se mais performática e fácil de usar. Ela oferece suporte aos mais recentes componentes de arquitetura do Android (Jetpack) e permite personalizar o processo de detecção de vazamentos.
Instalação
O LeakCanary é distribuído via Maven Central. Para instalar, adicione a dependência no arquivo build.gradle.kts (ou build.gradle) do seu módulo (app).
Importante: O LeakCanary é destinado apenas para builds de debug. Nunca o inclua na versão de release do aplicativo, pois isso pode impactar negativamente a performance e a segurança.
// build.gradle.kts (Module :app)
dependencies {
// debugImplementation — a biblioteca estará disponível apenas em builds de debug
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
// Para suporte ao Jetpack Navigation (opcional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-navigation:2.14")
// Para suporte ao Process Lifecycle (opcional)
debugImplementation("com.squareup.leakcanary:leakcanary-android-process:2.14")
}
Após sincronizar o Gradle, o LeakCanary registrará automaticamente seu ContentProvider na inicialização do aplicativo. Nenhuma inicialização adicional no código é necessária.
Início rápido
O exemplo mínimo funcional é simplesmente instalar a biblioteca. Depois disso, o LeakCanary monitorará automaticamente os vazamentos.
1. Instale a biblioteca conforme descrito acima.
2. Execute o aplicativo em modo debug.
3. Realize uma ação que possa causar um vazamento (por exemplo, gire a tela se houver um vazamento de Activity).
4. Se um vazamento for detectado, você verá uma notificação do sistema:

5. Toque na notificação para abrir a tela com o relatório detalhado (Heap Dump Info).
Exemplo de código que cria um vazamento para teste:
// Exemplo de vazamento: referência estática para uma Activity
class LeakyActivity : AppCompatActivity() {
companion object {
// A referência estática impedirá que a Activity seja coletada pelo GC
var leakedActivity: Activity? = null
}
override fun onCreate(savedInsta