内存检测工具LeakCanary的使用

       内存溢出(OOM)一直都是都是一个安卓工程师需要面对的问题,包括在面试中,对OOM问题的检测跟应对几乎可以决定面试官对一个安卓工程师水平的判断,所以掌握一个基本的内存检测工具是很有必要的。以下为大家介绍这款极其好用的工具LeakCanary。

       内存溢出的原因:许多对象是有有限制的生命周期的,当他们工作完成后,就会被垃圾回收。当对象的引用在对象的生命周期后还在持有该引用的话,就会出现内存泄漏的问题。当引用累计到一定一定时候,就会出现OOM的问题。

       上面这句话是什么意思?其实就是说,内存溢出的根本原因就是你以为你的Activity,service,或者数据流等已经关闭了,但是实际上没关闭!长时间重复操作之后没关闭之后就挂了。代码少的情况下可以一个个去排除,但是万一代码很多呢?逻辑已经非常复杂了怎么办?这个时候一行行的去打印内存大小效率高吗?低,非常低!所以需要有工具能够帮我们实时监测,监测我们哪一些没有关闭的。

       LeakCanary出场了,先贴上github上的网址:点击打开链接

       使用方法:

       第一步:在build.gradle:里面添加

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
  releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}

       第二步:在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...
  }
}

     第三步:运行自己的软件,记得不要使用debug模式,debug模式下不会提示,然后干嘛呢?去到你觉得有问题的activity的地方去操作,然后操作返回按钮。如果程序有问题会出现如下界面

      这是当执行关闭当前activity的操作的时候,LeakCanary回去查找软件的内存中还有没有存在当前avtivity的的实例,如果还存在,说明还没有完全杀死该activity,就会以通知栏的形式通知你,从上图来看,通知栏中通知我多次SongListOfMusciMagazineActivity1没有完全关闭,长时间再继续下去的话就会出现OOM,点击里面的通知查看问题。


     上面几行中直接提示了,哪个变量在activity被杀死后还是存在实例,并且有一系列该变量的操作,根据追踪全局查找,找到该变量,修复该问题,预防OOM的出现。

猜你喜欢

转载自blog.csdn.net/weixin_30267253/article/details/80855494