使用LeakCanary进行内存泄漏追踪

LeakCanary使用
1.在build.gradle 中
dependencies {
    //添加
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
2.如图:在Applaction onCreate()中
调用如下代码对LeakCanary进行初始化
3.实例:
在启动ChangeAgreementActivity 时会new 一个Fragment:ChangeAgreementFragment,在该fragment 的基类中调用了SharedPreferencesHelper类,在该类中通过单例模式持有了一个context,当ChangeAgreementActivity destory时,其Context会一直存在于单例中,由此引起内存泄漏。
 
 
现象:在启动app中某个Activity时会出现下图表示该页面存在内存泄漏:
可以通过点击通知栏orLeakCanary的icon查看泄漏记录图下图,进而追踪到SharedPrefreencesHelper中
 
修改思路:使用WeakReference 关联Context。
具体实施:
参见:SharedPreferencesHelper图的第二个红框上边注释的代码:mContext = ApplicationMy.getInstance();直接在SharedPreferencesHelper中调用Applaction中的Context。 而getInstance()在ApplicationMy的基类中,具体实现:
 
 
posted @ 2018-05-08 13:32  androiddream  阅读(270)  评论(0编辑  收藏  举报