使用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进行内存泄漏追踪
使用LeakCanary进行内存泄漏追踪
调用如下代码对LeakCanary进行初始化
使用LeakCanary进行内存泄漏追踪
使用LeakCanary进行内存泄漏追踪
3.实例:
在启动ChangeAgreementActivity 时会new 一个Fragment:ChangeAgreementFragment,在该fragment 的基类中调用了SharedPreferencesHelper类,在该类中通过单例模式持有了一个context,当ChangeAgreementActivity destory时,其Context会一直存在于单例中,由此引起内存泄漏。
 使用LeakCanary进行内存泄漏追踪
使用LeakCanary进行内存泄漏追踪
 
现象:在启动app中某个Activity时会出现下图表示该页面存在内存泄漏:
使用LeakCanary进行内存泄漏追踪
使用LeakCanary进行内存泄漏追踪
可以通过点击通知栏orLeakCanary的icon查看泄漏记录图下图,进而追踪到SharedPrefreencesHelper中
使用LeakCanary进行内存泄漏追踪
 使用LeakCanary进行内存泄漏追踪
修改思路:使用WeakReference 关联Context。
具体实施:
参见:SharedPreferencesHelper图的第二个红框上边注释的代码:mContext = ApplicationMy.getInstance();直接在SharedPreferencesHelper中调用Applaction中的Context。 而getInstance()在ApplicationMy的基类中,具体实现:
使用LeakCanary进行内存泄漏追踪
 使用LeakCanary进行内存泄漏追踪
 
上一篇:查看w3wp进程占用的内存及.NET内存泄露,死锁分析


下一篇:Vim 入门:基础