第二十四篇 Android内存泄露与检测

一、内存泄露与内存溢出的区别.

内存泄露:程序在向系统申请分配内存空间后(new),在使用完毕后未释放。结果导致一直占据该内存单元,我们和程序
都无法再使用该内存单元,直到程序结束,这是内存泄露。(泄露原因:无用对象,但可到达)

内存溢出:程序向系统申请的内存空间超出了系统能给的。比如内存只能分配一个int类型,我却要塞给他一个long类型,
系统就出现oom。又比如一车最多能坐5个人,你却非要塞下10个,车就挤爆了。

大量的内存泄露会导致内存溢出(oom)。

二、使用LeakCanary检测内存是否泄露.

1.在module的build.gradle中的dependencies加入:

    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'
    testImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'

2.在自定义的Applicaton中加入:

    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) {
            App app = (App) context.getApplicationContext();
            return app.refWatcher;
        }

3.在AndroidManifest.xml中注册自定义的Application即可。

三、集成LeakCanary后,出现内存泄漏会在通知栏出现内存泄漏信息,如下图:
这里写图片描述

注意:真机上测试没有出现在通知栏上,而是直接在手机桌面有个图标,点击进去就可以查看内存泄漏信息了。

点击详情后,就可以 查看具体内存泄漏信息,如下图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hhy113835/article/details/80181315
今日推荐