Android 内存泄露神器之LeakCanary
来源:互联网 发布:上海银行淘宝金卡功能 编辑:程序博客网 时间:2024/05/20 14:15
随着我们项目的不断完善,有一天突然发现性能出现在了我们面前,随之而来的就有内存泄漏、内存溢出等概念
先介绍一下内存溢出,即应用某一时刻所占有的内存超过所申请的内存,发生了内存溢出,OOM(OUT OF MEMORY )。
内存泄露呢,就是类持有外部类实例对象的引用,垃圾回收机制就回收不了该对象,所产生的现象。
今天主要讲讲如何检测内存泄露,导致内存泄露的原因有很多,比如:
1.cursor用完后没有关掉
2.输入输出流用完后没有关掉
3.注册对象为注销,如registerReceiver,但没有调用unregisterReceiver
4.bitmap使用后没有recycle
5.static关键字的不当使用
6.context的使用
7.adapter没有复用convertView等等
那么如何避免内存泄露呢?
也就是对以上原因一一对应解决
那如何检测是否发生内存溢出了呢,这里就用到了一个神器:LeakCanary,一个开源项目,其原理是设置Aplication的ActivityLifeCycleCallBacks方法,监听所有activity的生命周期
使用方法:1、在moudle工程下的build.gradle加入依赖
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
在我们的application中onCreate方法中进行初始化
mRefWatcher=LeakCanary.install(this);
大功告成,就这么简单,不要怀疑,哈哈当我们调用install时,会默认安装一个Leaks的apk,这个就是检测内存泄漏的,如果发生泄露了,这个apk中会有记录,打开它会告诉你详细信息,同时在泄露十秒左右,通知栏也会告诉你发生泄露了
还有一点需要注意的是,以上这么写默认是只检测activity的,如果想检测Fragment,Service,BroadcastReceiver等有生命周期的,需要在onDestroy中获取到RefWatcher然后调用watch()方法
mRefWatcher.watch(this);当然如果想自己将泄露信息传到服务器,然后再根据具体内容进行解决,可以自定义处理结果
//1 自定义服务 class MyLeakService extends DisplayLeakService{ @Override protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) { super.afterDefaultHandling(heapDump, result, leakInfo); //heapDump:堆内存文件,可以拿到完成的hprof文件 使用MAT分析 //result:监控到内存的状态,如是否泄漏 //leakInfo:leak trace详细信息,除了内存泄露对象,还有设备信息//在这里可以将这些信息上传到服务器 } } //2在manifest中注册服务 //3在App中install LeakCanary.install(this,MyLeakService.class);
- Android 内存泄露神器之LeakCanary
- Android内存泄露自动检测神器LeakCanary
- Android内存泄露自动检测神器LeakCanary
- Android内存泄露自动检测神器LeakCanary
- Android内存泄露自动检测神器LeakCanary
- Android工具:LeakCanary—内存泄露检测神器
- Android内存泄露监测工具之leakcanary
- Android内存泄露监测之leakcanary
- 内存泄露检测神器 -- LeakCanary源码分析
- Android 内存泄露检测工具 LeakCanary
- Android内存泄露检测(LeakCanary)
- LeakCanary-Android内存泄露检测
- Android内存泄露自动检测LeakCanary
- android leakCanary检测内存泄露
- Android内存泄露自动检测LeakCanary
- Android LeakCanary 检测内存泄露
- 内存泄露自动探测神器——LeakCanary
- 一个内存泄露自动探测神器——LeakCanary
- 适配器模式-如何把火鸡变成鸭子
- Cross-compiling TensorFlow for the Raspberry Pi
- 三星:大小屏QLED和OLED两手都要抓,都要硬
- EA&UML日拱一卒-多任务编程超入门-(9)线程同步
- ARM软件优化,从1s到10ms
- Android 内存泄露神器之LeakCanary
- 滑雪 POJ
- Google云端平台将GPU价格降低36%!
- oracle常用的时间格式转换
- Ubuntu ping通,xshell无法连接
- Java序谈之循环结构
- 通用对话弹窗CommonDialog
- android 常用权限和依赖
- 第5章习题5