美文网首页
Android 内存优化(LeaksCanary使用)

Android 内存优化(LeaksCanary使用)

作者: 拙峰朽木 | 来源:发表于2017-03-23 15:41 被阅读418次

安装步骤:

项目刚刚迭代结束,能稍微轻松几天,决定这段时间来整点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

Screenshot_2017-03-23-15-43-09_com.miui.home.png
  • 在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...
  }
}

使用

上面的步骤完成后,成功运行到手机中,然后随便把玩你的app,如果某个页面存在内存泄漏,app会弹个带黄标的dialog提示,同时手机通知栏也会有个通知,这是你点击learks app就可以查看到一个内存泄漏的列表:

Screenshot_2017-03-23-15-43-13_com.yanxiu.yxsanke_android.png

点击上面某个item,可以看到具体问题。我们就先看看MainActivity 中有啥子泄漏,

Screenshot_2017-03-23-15-43-21_com.yanxiu.yxsanke_android.png

看见了吗? 这里会告诉你在哪个类中哪些地方出现了泄漏,一目了然(好吧,需要点经验)。在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吧。

相关文章

网友评论

      本文标题:Android 内存优化(LeaksCanary使用)

      本文链接:https://www.haomeiwen.com/subject/sgeonttx.html