前言
内存泄漏是开发当中常见的狗皮膏药,我们要想实现一个项目开发下来没有内存泄漏,那是完全不可能的。即使你是大牛级别的人物,也难免会在忙碌的敲代码中出现一些纰漏。常见的检测内存泄漏的工具 有Allocation Tracker(Android Studio)工具、Heap Snapshot工具、Heap Viewer工具、LeakCanary工具、MAT工具、TraceView工具(Device Monitor) 、Lint 等等,考虑到工具的实用性,在此就介绍两种工具,那就是LeakCanary工具 和Lint 工具
下面是各种工具的使用文档
已经上传到 http://download.youkuaiyun.com/download/baidu_38477614/10170276
里面是各种工具的详细使用文档。为了方便,以下介绍两种我们开发这最喜爱的内存泄漏检测工具,那就是square第三方的 leakcanary ,只要集成好了,就能自动检测内存泄漏,但是本人更喜欢使用AS 中的Lint 工具 ,非常强大,比 leakcanary 更为强大。那么我们就先比较以下二者的功能
leakcanary
Square公司
可以直接在手机端查看内存泄露的工具
实现原理:本质上还是用命令控制生成hprof文件分析检查内存泄露。
然后发送通知。
功能:仅仅检测内存泄漏,告诉我们位置
Lint分析 工具
Lint是Android Studio 自带的很强大的一种分析工具,它的功能远远多于leakcanary
他能为我们提供什么?
检测资源文件是否有没有用到的资源。
检测常见内存泄露
安全问题SDK版本安全问题
是否有费的代码没有用到
代码的规范---甚至驼峰命名法也会检测
自动生成的罗列出来
没用的导包
可能的bug
本人最喜欢使用Lint分析工具 ,强大更好使用
现在介绍如何继承第三方的 leakcanary
集成leakcanary
官方leakcanary 的gitHub地址https://github.com/square/leakcanary
1.添加LeakCanary依赖包
这里是至今最新的版本,可以访问上方的GitHub地址获取
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
2.首先创建一个ExampleApplication,该类继承于Application,在该类的onCreate方法中添加如下代码开启LeakCanary监控:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// Normal app init code...
}
}
这里就集成结束了,这样你就可以在debug的时候它会安装一个图标自动监测内存泄漏了,下面是他在桌面生成的图标,一个小鸡
当检测到内存泄漏的时候它会发送一个通知 和一个弹窗,很体贴的告诉你位置
如果你正在进行单元测试,想要关闭leakcanary 那么请在 builder.gradle 中添加
// Ensure the no-op dependency is always used in JVM tests.
configurations.all { config ->
if (config.name.contains('UnitTest')) {
config.resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.squareup.leakcanary' && details.requested.name == 'leakcanary-android') {
details.useTarget(group: details.requested.group, name: 'leakcanary-android-no-op', version: details.requested.version)
}
}
}
}
作为开发者,我们很少用到。
Lint分析工具
我们怎么在Android studio 中 开始使用 lint 分析工具
接下来会弹出 以下窗体
点击 ok AS 就帮我们开始分析了
这里是所有的好东西 包括了以下几点
检测资源文件是否有没有用到的资源。
检测常见内存泄露
安全问题SDK版本安全问题
是否有费的代码没有用到
代码的规范---甚至驼峰命名法也会检测
自动生成的罗列出来
没用的导包
可能的bug
是不是很强大,是不是很man 顿时觉着AS 好贴心哪,还有很多它会检测出来
例如驼峰命名法 比如
//你声明一个context
private Context mcontext ;
他会检测出你代码不规范。还有很多功能 大家自己去测试一下吧。
我推荐大家使用Lint 分析工具,第三方的Leakcanary 简单,懒汉式追求,当然也很强大,但是一般的小公司里都在使用 Leakcanary ,这个完全靠大家兴趣。
上一篇讲了常见的内存泄漏的案例以及解决办法。地址http://blog.youkuaiyun.com/baidu_38477614/article/details/78874459
我会持续发布一些内存优化的博客,敬请期待。谢谢