中文翻译:https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
使用的话,首先导入依赖
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
需要注意的是,版本号问题,有时候会无法运行
然后就是创建继承Application的类
public class ExampleApplication extends Application { private RefWatcher refWatcher; @Override public void onCreate() { super.onCreate(); refWatcher= setupLeakCanary(); } private RefWatcher setupLeakCanary() { if (LeakCanary.isInAnalyzerProcess(this)) { return RefWatcher.DISABLED; } return LeakCanary.install(this); } public static RefWatcher getRefWatcher(Context context) { ExampleApplication leakApplication = (ExampleApplication) context.getApplicationContext(); return leakApplication.refWatcher; } }
然后,只需要在Activity的销毁中调用
@Override protected void onDestroy() { super.onDestroy(); RefWatcher refWatcher = ExampleApplication.getRefWatcher(this); refWatcher.watch(this); }
最后,就是在清单文件中进行注册,完成
<application android:name=".neicunguanli.ExampleApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
</application>
需要注意的是,如果不注册,就会无法使用,得到内存泄漏,但是如果你还有App的全局时,两者只能二选一,
我还没有解决的办法,谁知道怎么弄告诉我一声,非常感谢
![](https://i-blog.csdnimg.cn/blog_migrate/d19fe7e72e78ae7b8302c648ca15a149.png)
1.如图,好多人使用LeakCanary,检测内存泄漏,在自己工程里面接入了LeakCanary,但是却不知道怎么解读它的错误信息
2.这个图的意思就是
第一部分(LeakSingle类的sInstance变量)引用第二部分(LeakSingle类的mContext变量), 导致第三部分(MainActivity类的实例instance)泄露.