• Android之内存泄漏


    开篇之前,我们要先理解:什么是内存泄漏。
    百度百科:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
    内存泄漏的影响上面也说的很清楚了,所以我们需要发现内存泄漏,并解决内存泄漏。

    在Android中,要如何发现内存泄漏呢?
    我目前有用到两种方法,第一种是用Android Studio,这个方法可以检测Activity的内存泄漏;第二种是使用LeakCanary,可以检测所有内存泄漏。

    第一种方法:
    我目前用的是Android Studio,Android Studio有一个自带的检测内存泄漏的方法。
    首先,打开Monitor界面:


    Monitor界面.png


    然后,打开APP,测试APP有内存泄漏嫌疑的界面,点击下图按钮,强制GC:


    强制GC.png


    接下来,点击下图所示按钮,进入HPROF Viewer界面,查看Java的Heap:


    点击按钮,进入HPROF Viewer界面.png

    HPROF Viewer界面.png


    然后,点击上图所示的“Analyzer Tasks”按钮,打开Analyzer Tasks界面:


    Analyzer Tasks界面.png


    点击上图所示按钮,开始分析内存泄漏,结果如下图所示:


    内存泄漏分析结果.png


    如上图所示,出现了两个内存泄漏,可以根据箭头所指区域的信息修改内存泄漏问题。

    第二种方法:
    LeakCanary是一个开源的在debug版本中检测内存泄漏的java库。
    GitHub地址为:https://github.com/square/leakcanary
    根据GitHub上的说明文档,集成LeakCanary:
    在app的build.gradle中,加入以下代码:

    dependencies {
       debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
       releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
       testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
     }

    在自定义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...
      }
    }

    然后,就可以直接使用了。
    LeakCanary除了会在界面中显示泄漏信息之外,Log中也一样会输出泄漏的具体信息。我们可以根据这些信息解决内存泄漏问题。

  • 相关阅读:
    RECOVER DATABASE SKIP TABLESPACE
    mysql加解密函数
    node获取代码的svn版本号,并打包的时候,输出指定文件到打包后的项目里面
    layer.open iframe自动高度
    IIS部署.net5项目
    使用Windows命令行启动关闭服务(net,sc用法)(转)
    centos7 修改IP 设置静态IP,开启SSH
    链接PostgreSQL报错authentication method 10 not supported解决
    PostgreSQL Windows安装教程
    POI隐藏行 隐藏列,EasyExcel隐藏行 EasyExcel隐藏列
  • 原文地址:https://www.cnblogs.com/shenchanghui/p/7146939.html
Copyright © 2020-2023  润新知