内存异常的情况:


我们看到一直在上涨~

内存正常的情况:


内存有涨有跌,这样才说明内存能够被回收。

Mat 工具的使用:

使用mat 打开hprof文件,查看你认为可能泄露的类的引用。

如果是java层导致的泄露,会有下面类似的截图:

你们能看到调用链,我这里泄露是因为用当前的context 注册了广播,没有取消注册导致的。

如果是native 的占用,可能你打开之后,看不到引用链,后面只写了native

表示你被natvie 的堆栈 或者变量占用了,这时候,就要分析代码了。看这个没啥用了。你看看当前的activity 是不是传递给了c 层。

比如,我下面就是一个native 的占用导致activity 泄漏:

有问题的:mCore.setChapterGraphKeywordCallback(new     JNIChapterGraphKeywordCallbackImp(this));修改之后:/*** 这里使用静态内部类 加弱引用* 解决 内存泄漏问题* 不要直接把BookBrowserFragment 或者 Activity 传递给C 层* 容易导致内存泄漏** */static class JNIChapterGraphKeywordCallbackImp implements JNIChapterGraphKeywordCallback{private WeakReference<BookBrowserFragment> mWeakReference;public JNIChapterGraphKeywordCallbackImp(BookBrowserFragment bookBrowserFragment) {mWeakReference = new WeakReference<>(bookBrowserFragment);}@Overridepublic List<String> loadChapterGraphKeyword(int i) {BookBrowserFragment bookBrowserFragment = mWeakReference.get();if (bookBrowserFragment != null) {return bookBrowserFragment.loadChapterGraphKeyword(i);}else{return null;}}}

其实AS 也提供了查看内存的实例的方法,

下面是解决内存泄漏之前 和 之后的对比图:

总结:

  1. mat 的使用
  2. this 查看 当前fragment 和 activity 被哪里引用了
  3. leakCarary 的功能mat 都有,而且还有native 引用
  4. 内存里面的实例太多,就是被泄露了,回收不了。
  5. c层不要直接引用fragment
  6. leakCarary 可以解决基本上java层的泄漏

Android 内存泄漏问题分析 指南相关推荐

  1. Android内存泄漏的分析和避免

    内存泄漏 Java是垃圾回收语言的一种,其优点是开发者无需特意管理内存分配,降低了应用由于局部故障(segmentation fault)导致崩溃,同时防止未释放的内存把堆栈(heap)挤爆而导致程序 ...

  2. android内存泄漏原因分析,Android Studio3.6的内存泄漏检测功能 VS LeakCanary

    2020年2月,谷歌发布了Android Studio 3.6版.它包括一个新的"内存泄漏检测"功能.这是否意味着我们不再需要流行的内存泄漏检测库"Leak Canary ...

  3. android内存泄漏原因分析,android 内存泄漏问题

    内存泄露问题在一些压力测试的场景很容易暴露,例如一些常用应用场景反复操作(eg:反复切换前后摄像头,反复进入退出相机应用.压力拍照等等). 内存泄露一般表现为: ①内存分配释放,导致进程空间虚拟地址被 ...

  4. android内存泄漏原因分析,Android 内存泄漏案例分析总结(Handler)

    在Android开发开发中,操作不当很容易引起内存泄漏,这里主要记录下平时遇到问题,包括:静态变量(也包含集合).非静态的内部类.Handler.监听器,尤其是 Handler 在开发中要格外的注意. ...

  5. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  6. Android内存泄漏分析及调试

    2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...

  7. Android 内存泄漏分析指北

    android 内存泄漏分析指北 简单来说内存泄漏就是当对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用 java 垃圾回收介绍: Java 虚拟机运行所管理的内存包括以下几个 ...

  8. Android内存泄漏的检测流程、捕捉以及分析

    https://blog.csdn.net/qq_20280683/article/details/77964208 Android内存泄漏的检测流程.捕捉以及分析 简述: 一个APP的性能,重度关乎 ...

  9. Android 内存泄漏分析与解决方法

    Android 内存泄漏分析与解决方法 参考文章: (1)Android 内存泄漏分析与解决方法 (2)https://www.cnblogs.com/start1225/p/6903419.html ...

最新文章

  1. java怎么求两组整数的或集,确定整数是否在具有已知值集的两个整数(包括)之间的最快方法...
  2. 2019-11-10 等价、相似、合同的一些概念
  3. CF888E Maximum Subsequence(meet in the middle)
  4. 电大计算机应用技术基础视频,电大形成性测评-计算机应用技术基础01
  5. Spring Boot学习笔记(二)——HelloWorld实现
  6. QTableWidget item设置不可以选中和编辑状态
  7. 天池学习赛:工业蒸汽量预测2——特征工程
  8. 就我不坑2 nyoj(简单模拟)
  9. 播放器的html代码怎么写,制作HTML播放器代码及方法
  10. 独家秘技||如何快速入门一个陌生知识领域?
  11. c语言实现字符串倒过来输出
  12. 聊聊CentOS停止维护,要我说这是件大好事!
  13. 飞行模拟器V1.0正式版
  14. WORD: 如何在一个word里文档里创建多个目录?
  15. android 开关机动画
  16. 前端面试题(附答案)完善中……
  17. 【Pycharm教程】代码调试、git操作、连接远程服务器
  18. 嵌入式软件开发工程师面试指南_总结
  19. 酱油带你用cocos2dx3.0完成一款战棋游戏 (曹操传)(一)地图制作篇 1
  20. IT新技术发展与企业信息化创新特征分析

热门文章

  1. 宽依赖和窄依赖_Spark术语解释及宽窄依赖执行原理,代码分析
  2. mysql数据库核对_Mysql数据库操作总结
  3. java newsize_JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize区别介绍...
  4. CUDA support is required (OpenCV CMake parameter ‘WITH_CUDA‘ must be true).
  5. 本质矩阵与基本矩阵(对极几何)
  6. syntaxerror是什么错误_【第1643期】自定义错误及扩展错误
  7. 动态数组怎么定义_Excel VBA 数组基础知识,初学者不可不学的关键知识
  8. Linux下/dev/null 21 相关知识说明
  9. Spring MVC - 配置Spring MVC
  10. php中的单引号与双引号详解