Skip to content
A memory leak detection library for Android and Kotlin.
Branch: master
Clone or download
pyricau LeakSentry can be disabled (#1332)
LeakCanary has an enabled config option. Default is on in debug builds off in release builds.

Fixes #1327
Latest commit f74f609 May 4, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.buildscript Automatically deploy snapshots to Sonatype. Jan 4, 2016
.github Updating template: plz latest + cleanup (#1121) Oct 16, 2018
gradle Remove result service, add result listener (#1314) Apr 29, 2019
leakcanary-analyzer-perflib Updating Deprecated Calls & Lint Fixes (#1322) May 2, 2019
leakcanary-analyzer Add test coverage for heap analysis (#1329) May 4, 2019
leakcanary-android-core Add TextToSpeech leaks to exclusion list May 4, 2019
leakcanary-android-instrumentation Introducing exclusion priority (#1317) Apr 30, 2019
leakcanary-android-process Extract multi process out (#1307) Apr 25, 2019
leakcanary-android Extract multi process out (#1307) Apr 25, 2019
leakcanary-haha Replace multiple leaks test with generated heap dump (#1323) May 1, 2019
leakcanary-leaksentry LeakSentry can be disabled (#1332) May 4, 2019
leakcanary-log add logging to service Apr 17, 2019
leakcanary-sample Fix strict mode violations (#1319) May 1, 2019
leakcanary-watcher LeakSentry can be disabled (#1332) May 4, 2019
.gitignore Empty repo May 7, 2015
.travis.yml LeakSentry (#1253) Apr 4, 2019
CHANGELOG.md Update CHANGELOG.md Apr 27, 2019
LICENSE.txt Initial import May 8, 2015
README-1.6.md swap out 2.0 Apr 23, 2019
README.md Update README.md Apr 27, 2019
build.gradle Bumping Gradle for Android Studio 3.4 (#1299) Apr 26, 2019
checkstyle.xml Fix crash and slight API change Jun 28, 2018
gradle.properties Prepare for next development iteration Apr 23, 2019
gradlew Bumping Gradle for Android Studio 3.4 (#1299) Apr 26, 2019
settings.gradle Merge analyzer-core and analyzer back together (#1308) Apr 25, 2019

README.md

LeakCanary

A memory leak detection library for Android and Kotlin.

“A small leak will sink a great ship.” - Benjamin Franklin

Getting started

Add LeakCanary to your build.gradle:

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-1'
}

You're good to go! LeakCanary will automatically show a notification when an activity or fragment memory leak is detected in your debug build.

Note: LeakCanary 2 is in alpha.

Presentations

Recipes

Watching custom objects

class MyService : Service {

  // ...

  override fun onDestroy() {
    super.onDestroy()
    LeakSentry.refWatcher.watch(this)
  }

}

Configuring LeakSentry & LeakCanary

LeakSentry is in charge of detecting memory leaks. Its configuration can be updated at any time by replacing LeakSentry.config:

class DebugExampleApplication : ExampleApplication() {

  override fun onCreate() {
    super.onCreate()
    LeakSentry.config = LeakSentry.config.copy(watchFragmentViews = false)
  }
}

LeakCanary is in charge of taking heap dumps and analyzing them. Its configuration can be updated at any time by replacing LeakCanary.config:

disableLeakCanaryButton.setOnClickListener {
  LeakCanary.config = LeakCanary.config.copy(dumpHeap = false)
}

Counting retained instances in production

In your build.gradle:

dependencies {
  implementation 'com.squareup.leakcanary:leaksentry:2.0-alpha-1'
}

In your leak reporting code:

val retainedInstanceCount = LeakSentry.refWatcher.retainedKeys.size

Alternate setup with the old perflib heap parser

If you want to try LeakCanary 2.0 features with the battle tested perflib heap parser, use a different dependency:

dependencies {
  // debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-1'
  debugImplementation 'com.squareup.leakcanary:leakcanary-android-perflib:2.0-alpha-1'
}

In your debug Application class:

class DebugExampleApplication : ExampleApplication() {

  override fun onCreate() {
    if (LeakCanary.isInAnalyzerProcess(this)) {
      // This process is dedicated to Perflib for heap analysis.
      // You should not init your app in this process.
      return
    }
    super.onCreate()
  }
}

FAQ

Note: the entries in this FAQ have not been updated for LeakCanary 2 yet.

License

Copyright 2015 Square, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
You can’t perform that action at this time.