android leaks工具,android使用Leaks检测内存泄漏

Leaks 内存泄漏检测工具使用

网址:https://github.com/square/leakcanary

在你的module中添加依赖

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'

releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'

testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'

在Application中添加

LeakCanary.install(this);

并且确保你的app处于调试模式,如下图

550b6152ef3937b652c46e7e5a55b4c0.png

当切换到release版本的时候,leakcanary-debug不会被打包.所以切换到release之后不用对leakcanary做注释或者删除等操作.

现在就可以开始使用了,重新编译你的工程,运行在模拟器或真机上.

在各个页面中测试,如果存在内存泄漏的情况,leaks会弹出通知提醒你查看.

在leaks中会有详细的泄漏说明,如产生内存泄漏的大小,产生内存泄漏的页面和相关的信息。

13b076a779b4e8d7da333beebc3e4343.png

内存泄漏详情:

51a99840c2703ca83436c96b144c2821.png

最后有一些关于内存泄漏的建议:

为了避免上下文相关的内存泄漏,记住以下几点:

不要长期引用context-activity(引用一个活动应该有相同的生命周期活动本身)

使用getApplicationContext而不是context或activity试试

避免非静态内部类的一个活动如果你不控制自己的生命周期,使用静态内部类,让一个弱引用来传递,并且记住,垃圾收集器对于内存泄漏并不保险。

下面说几个作者遇到的内存泄漏的情况以及解决方案:

使用百度地图LocationClient.在Activity被销毁时调用

if (mLocClient != null){

mLocClient.unRegisterLocationListener(myListener);

mLocClient.stop();

}

使用友盟分享登录时, 传递getApplicationContext

第三方库如果需要传入Activity的时候,传递一个弱引用进去, 可以避免内存泄漏,如下:

Referencereference = new WeakReference(getActivity());

new ShareAction(reference.get()).setDisplayList(displaylist);

在Handler中容易造成内存泄漏,最好使用弱引用方式,要么,在Activity销毁的时候清空所有的handler栈。

在使用WebView的时候也可能出现内存泄漏,解决办法,我的另一篇博客里有详细讲解。

http://blog.csdn.net/fancy_xty/article/details/51595697

在使用RxJava的时候也可能会出现内存泄漏,可以使用RxLifecycler来解决。

关于博客中的内容有任何疑问欢迎加群讨论:283272067

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值