Android程序内存测试框架leakcanary的使用

Android程序内存测试框架leakcanary的使用

目前能测试Android程序内存泄漏情况的方法,一个是使用Studio的开发工具自带的检查功能,如果不使用Studio可以使用leakcanary这个框架,也是目前最叼的框架。网上很多使用示例都是使用Studio开发的,需要远程依赖,我这个是使用IDEA开发的(工作目录和Eclipse一样),把三个lib项目工程导入,并依赖就可以使用框架的类来监听内存泄漏情况了。

使用leakcanary框架后,你程序中页面存在内存泄漏,它会弹出通知提醒你,哪个页面泄漏多少内存,以及泄漏内存的原因。

程序泄漏,图解:
1

leakcanary的使用:

1.导入3个项目工程,并依赖这三个项目工程

具体的看我的项目代码

2.在AndroidManifest中注册项目工程中用到的一个Activity和两个Service。

  <activity android:name="com.squareup.leakcanary.internal.DisplayLeakActivity"/>


        <service android:name="com.squareup.leakcanary.DisplayLeakService"
                 android:enabled="false"
                />
        <service android:name="com.squareup.leakcanary.internal.HeapAnalyzerService"
                 android:enabled="false"
                 android:process=":leakcanary"
                />

3.在Application中注册框架

   private static APP instance;

    private RefWatcher mRefWatcher;

    @Override
    public void onCreate() {
        super.onCreate();
        //注册内存框架
        instance = this;
//
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }

        mRefWatcher = LeakCanary.install(this);
    }


    public static APP getAppIntance() {
        return instance;
    }




    public RefWatcher getRefWatcher() {
        return mRefWatcher;
    }

4.在任意的Activity中监听,也可以在BaseActivity中实现监听每一个Activity

/**
 * 内存泄漏测试
 */
public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        //监听泄漏
        RefWatcher refWatcher = APP.getAppIntance().getRefWatcher();
        if (refWatcher != null) {
            refWatcher.watch(this, "MyActivity");
        }
    }

。。。

}

对于Fragment也是可以这样监听,传入的this是一个对象,并非上下文,这里就可以监听整个MyActivity中的内存泄漏情况!

项目中的源码(包含类库):https://github.com/liwenzhi/wenzhi_leakCanary_eclipse/tree/master

如果时Studio开发,就不用导入工程项目了,依赖就可以了,当时测试框架的使用都是差不多的。

下面是我的一个程序的运行情况,是一个启动页面的设计效果:

3
一个启动页面居然会泄漏1.5M 的内存!一般的程序上线都是需要经过各种检测的,内存检测也是其中一个很重要的部分。

Android内存泄漏的几种情况:

1.单例模式

2.Handler的生命周期与Activity不一致

3.线程的使用

4.数据库、读写流没有释放

5.不断new出的对象没有及时释放等等

也是大家要注意的地方,当时有些页面无论怎么注意都会泄漏,检测手段就非常重要了。

共勉:你可以改变自己,改变世界!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值