| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android内存优化(一)内存泄露监测与问题排查 -> 正文阅读 |
|
[移动开发]Android内存优化(一)内存泄露监测与问题排查 |
一、前言所谓工欲善其事必先利其器,要想对内存泄露进行排查,那肯定少不了工具的运用。本章将会介绍三种工具来帮助你发现与解决这些内存泄露的问题。下一篇会总结遇到的内存泄露的问题。 分别是以下三个工具:
二、LeakCanary使用想必这个内存泄露监测库大家都不陌生了, 如何引入?一行代码解决
是的没错,最新版的LeakCanary只需要上面一行代码即可,相比以前还要在Application中注册省了一步。 如何使用? 当你把测试包安装到手机后,你就会发现手机上多了一个伴生App,他就是来记录你内存泄露的信息的。如下:
?如果发生了内存泄露,App里会提示如下: (好像泄露的有点多。。。)? 点进去可以看到具体泄露的一些代码提醒,具体泄露的代码就需要自己去分析。因为我觉得他给的信息太少了。。还不方便,推荐使用LeakCanary来监测泄露,Android Studio Profiler来分析泄露问题。 三、Android Studio Profiler使用(推荐)部分数据信息来源安卓官网,建议看以下文章,官网有些信息没有及时同步。 Android Studio版本:Android?Studio?Bumblebee?|?2021.1.1?Patch?2(当时最新的) 相比以前的Android Monitor 工具(简称摸你头工具),新版的Profiler简直不要太好。接下来我们看如何使用 如何使用?没错,直接点下面这个按钮Profiler按钮,就可以直接使用 根据下图操作 ?接下来就是重中之中了 下面我们分别解释上面图显示信息的作用 ? ?分别解释以上功能:
??分别解释以上文字信息:
?查看内存分配情况这里我选择的是第一个?Capture heap dump选项,点击Record就可以看到如下图片:
您可以使用已分配对象列表上方的三个菜单选择需检查的堆以及如何组织数据。 从左侧的菜单中,选择需检查的堆:
从中间的菜单中,选择如何安排分配:
从右侧的菜单中,选择如何安排分配:
在类列表中,您可以查看以下信息:
分析问题时主要关注:Allocations 和 Shallow Size。 好了,说了这么多这么水文的信息,接下来上一个项目实战的泄露问题分析实例。就一个,多的就没了。如图: ?可以很明显的看到,CircleInfoActivity发生了内存泄露,至于泄露的原因其实就是被一个Static的变量持有着。 分析技巧:可以点击如图Show nearest GC root only 按钮,这时候就可以看到离他最近GC引用有两条,第一条很明显看不懂干嘛用的(老师说过:不会的可以先跳过),第二条就可以很明显看到他被mVideoViews所持有。如图: 找到问题,就很好解决了,在该释放的地方释放就好了。 ?(如果你还是找不到,那还是放开他吧Show nearest GC root only,然后慢慢找。。。,或者再试试下面MAT试试有没有新的发现) 四、MAT使用其实我在内存泄露问题分析上,基本上Profiler就可以发现问题了,至于没发现的,用了MAT也还是没发现。。。haha。接下来我们看如何使用: MAT工具下载百度云下载?? JAVA环境配置由于最新版的MAT还需要JAVA 11,所以还需要配置JAVA 11的环境。 JAVA 11环境配置: 很惊讶把,Java 8 和Java 11都有,记得把Java 11放到Java 8前面,这样Java环境才是11。可以CMD 》》Java -version 验证一下 hprof文件获取与格式转换1.Hprof文件获取 点击红色箭头按钮,便可以获取到Hprof文件。 2.Hprof格式转换 由于从Android studio中保存堆栈信息,由于Android studio的hprof文件格式与mat的格式不兼容,所以需要使用 安卓SDK 中的 hprof-conv.exe工具转换一下。 例如我的路径为:D:\20210426\androidSDK\platform-tools\hprof-conv.exe,其实就是你自己的安卓SDK下载路径,具体地址根据自己下载位置寻找。 最好就是把platform-tools文件夹的路径添加到系统环境变量中,方便使用。 2.1 hprof-conv 工具使用
memory-20220421T102718.hprof 也就是你从Android studio获取的Hprof文件了。 MAT使用1.打开MAT ?2.导入Hprof文件,也就是你上面转化好的文件? 3.选择Leak Suspects Report ?4.点击Histogram 5.搜索有泄露问题的文件,例如上面提到的CircleInfoActivity ?6.如下图操作 排除虚、弱、软引用,因为这些基本不会发生泄露 ?7.点击后如下图,是不是发现和Android Studio Profiler的结果很像。 MAT其他功能补充饼图分析 可以看到,饼图里列出了两个会泄露的类。可以往下细致看看? ?看到这,一个是系统的HandleThread,一个是Class,这问题列了跟没列一样。 其实有时候还是有用的,那就是你泄露的类占用了很大的内存。 ?好了,到这里就结束了,下一篇会总结遇到的内存泄露。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 0:03:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |