Android内存泄漏的检测流程、捕捉以及分析
通常内存泄漏的隐藏性质比较强,不同于异常导致的程序Crash,在异常导致的Crash中,我们能够及时的发现程序问题的存在,并通过log日志定位到问题所在的具体位置,然后及时进行解决,而内存泄漏则不同,在APP中存在内存泄漏的情况下,用户在低频率短时间的使用中,并不能察觉到有什么异样,反之,随着使用频率的提高和使用时长的增加,内存泄漏就会一直慢慢积累,消耗内存,从而会导致手机卡顿,直至APP崩溃,所以防止APP内存泄漏的出现,是至关重要的。
关于内存泄漏的检测,我们分为了以下几个阶段:
1. 开发编码过程中,在开发过程中就不断对代码进行内存泄漏的检测
2. 项目或者模块开发完成后,对应用进行整体的内存泄漏检测
3. 在项目上线后,远程端检测项目是否存在内存泄漏的情况
一:开发编码过程中,检测内存泄漏
1.检测工具:LeakCanary
首先最容日上手并且效果还不错,那就要属LeakCanary,效果也直观,具体的使用配置也很简单。
- 在项目的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'
- 在application中初始化LeakCanary,到此处配置完成
/** Explain : 初始化内存泄漏检测
* @author LiXaing
private void initLeakCanary() {
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
LeakCanary.install(this);
}
在发生内存泄漏的时候,会在通知栏出现一个提示图标,当点击进去之后,就是现在展示的这张图片,会直观的展示内存泄漏的位置。注意:通过LeakCanary的使用,它可以为我们快速找到内存泄漏的位置,但并不能够提供我们内存泄漏的原因,有的时候,内存泄漏的位置是由于其他原因导致的。
二:项目或者模块开发完成后,检测内存泄漏
android Studio中AndroidMonitor自带的一个工具—>memory,这个工具也可以说是非常的好用,先简单的介绍一下,memory虽然不可以分析出哪部分存在泄漏等情况,但可以很直观的看到内存的占用情况,看到内存的动态变化。
Android profile插件,Android studio最新的控件,可以监测cpu的使用率,网络流量监控,以及内存使用情况。
MAT(memory analyzer Tool)工具的使用