Android_内存泄漏总结(一):Memory Analyzer Tool & Leak Canary工具使用

  • Memory Analyzer工具使用
    1. 项目地址与使用说明
    2. 分析实例
      2.1 Android Studio中通过Android Profiler工具生成后缀为hprof的二进制文件;
      2.2 通过Android Sdk自带的转换工具hprof-conv.exe将上面AS生成的hprof文件转化为MAT工具可以识别的hprof文件,命令行为:
      hprof-conv inputfile.hprof outfilename.hprof
      需要将inputfile.hprof文件拷贝到sdk的platform-tools目录下。
      2.3 主要通过MAT中的Histogram和dominator_tree工具结合分析如图所示
      在这里插入图片描述
  • Leak Canary开源框架使用
    1. Leak Canary项目地址
    2. Leak Canary介绍:LeakCanary本质上是一个基于MAT进行Android应用程序内存泄漏自动化检测的的开源工具,我们可以通过集成LeakCanary提供的jar包到自己的工程中,一旦检测到内存泄漏,LeakCanary就好dump Memory信息,并通过另一个进程分析内存泄漏的信息并展示出来,随时发现和定位内存泄漏问题,而不用每次在开发流程中都抽出专人来进行内存泄漏问题检测,极大地方便了Android应用程序的开发。
    3. Leak Canary配置使用
    3.1 在application中的oncreate中对Leak Canary初始化
	if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
        LeakCanary.install(this);

3.2 在build.gradle 中添加依赖

	debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
    // Optional, if you use support library fragments:
    debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.2'
  • 内存泄漏需要关注的点
    1. 核心思想,或者说要注意的问题是,非静态的内部类持有外部类的引用
    2. 造成内存泄漏的点:handler内部类,Time,TimerTask,内部匿名线程、AsyncTask内部类、单例模式持有activity的上下文;BroadCastReceiver、ContentObserver、FileObserver、Cursor、Callback在activity或者其他UI界面销毁时没有unregisiter或者close掉,否则,activity可能被system强引用,而在强引用时内存是无法释放的。
  • 参考资料
    1. android内存优化
    2. Java 虚拟机内存分配机制
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值