安装步骤:
项目刚刚迭代结束,能稍微轻松几天,决定这段时间来整点Android性能优化方面的。就先从内存优化开始,要优化总得找出你哪块需要优化吧,这就得需要一些工具了。
目前android studio 已经自带memory monitor,这个直接可以拿来用,还有那个MAT。不过这两用起来还是有点麻烦(以后再写有关他们的),今天的主角是LeaksCanary 。用他的主要有时就是方便,在项目中装个依赖包就ok了。
- 依赖包引入:
dependencies {
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'
}
试了下,自己调试的时候只需要加:debugCompile的地址就行了。当然你上线的时候最好还是把三个依赖都去掉,因为运行后会在手机界面生成一个黄色的app:learks
- 在Application中初始化
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...
}
}
- 项目在github上的地址:https://github.com/square/leakcanary
使用
上面的步骤完成后,成功运行到手机中,然后随便把玩你的app,如果某个页面存在内存泄漏,app会弹个带黄标的dialog提示,同时手机通知栏也会有个通知,这是你点击learks app就可以查看到一个内存泄漏的列表:
点击上面某个item,可以看到具体问题。我们就先看看MainActivity 中有啥子泄漏,
看见了吗? 这里会告诉你在哪个类中哪些地方出现了泄漏,一目了然(好吧,需要点经验)。在MainActivity中UnUsualPageHelper这个单列使用了当前Activity作为上下文,好吧,我们到源码中看看:
private void setUnusualPage(View rootView, int rootId, int usualPageId) {
mStateViewHelper =UnUsualPageHelper.getInstance().setUnUsualPage(this, rootView, rootId, usualPageId);
mViewPager = (ViewPager) findViewById(R.id.viewPager);
tab_layout = (SKTabLayout) findViewById(R.id.tab_layout);
mLlMainLayout = (LinearLayout) findViewById(R.id.ll_main_list);
}
就是其中把this传入了,其实这是个很常见的泄漏,只需要把this 改成applicationContext就行了。
总结
文章不长,第一次认真的在简书上写文,希望以后能支持下去。LeaksCanary用起来还是挺方便的,给测试机上装个,然后让测试去测,等他过完测试用例 ,你在拿来看看learks中的列表,挨个解决就行。当然一些深点的感觉还是用MAT吧。