文档开发者中心
我的

Android内存检测利器之LeakCanary

作者:HW-LKZ


Android开发中, 所用到的基本组件大都有生命周期,生命周期过后,组件所占用的内存就会被系统回收,但有些情况下因为代码书写的问题,例如组件的引用被静态变量所持有,内存不会被释放,由此可能会引发一些问题如程序卡顿,系统强制回收内存引起的空指针等问题.
LeakCanary是Square的一个开源项目,它是一个Android和Java的内存泄露检测器,在检测到内存泄漏后可以给出很好的界面提示,例如具体到哪个静态变量无法释放.在Android studio和Eclipse中都可集成.

集成方式:
Android studio
1:build.gradle中添加引用:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

网上大部分人说的是用1.3版本,但是1.3版本在Android 6.0 之后有问题,我测试发现无法正常使用,而1.5版本解决了6.0之后的适配问题.

2:Application中添加
LeakCanary.install(this);

Eclipse
1:导入 leadcanary-analyzer,leadcanary-android,leadcanary-watcher 三个工程,其中 leadcanary-analyzer依赖leadcanary-watcher,leadcanary-android依赖leadcanary-analyzer ,各工程参考附件
2:创建demo工程依赖leadcanary-android工程,并在AndroidManifest.xml中添加相关的activity和service
<!-- 相关的服务与Activity -->
<activity
android:name='com.squareup.leakcanary.internal.DisplayLeakActivity'
android:enabled='false'
android:icon='@drawable/leak_canary_icon'
android:label='@string/leak_canary_display_activity_label'
android:taskAffinity='com.squareup.leakcanary' >
</activity>

<service
android:name='com.squareup.leakcanary.internal.HeapAnalyzerService'
android:enabled='false'
android:process=':leakcanary' />
<service
android:name='com.squareup.leakcanary.DisplayLeakService'
android:enabled='false' />
3:
Application中添加
LeakCanary.install(this);

4:手动创建一个demo测试一下吧
public class MainActivity extends Activity
{
static Demo sDemo;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SDKChannelConfig.getInstance(this);
if (sDemo == null)
{
sDemo = new Demo();
}
finish();

}

@Override
protected void onDestroy()
{
Log.i('MainActivity', 'onDestroy');
super.onDestroy();
}

class Demo
{
}
}
运行起来几秒钟之后出现Dumping momory的提示,并有每个内存泄漏的树状详情.


点赞
收藏
回复
分享
举报
浏览778 发布于2019-10-17 06:53未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。