文章目录
- 一、前言
- 二、内存泄露的排查方式
- 三、参考链接
一、前言
对于常规意义上的线程使用要及时关闭,数据库用完要及时关闭,数据用完要及时清空等等这里不再赘述,但是在开发中总会有不熟悉的api,开发进度过快,开发人员粗心等等原因导致内存泄露。可以使用leakcanary
(参考链接:https://square.github.io/leakcanary/)内存检测处理,或者使用lint
(参考链接:https://developer.android.google.cn/studio/write/lint?hl=zh-cn)静态代码检测后=,或者开启严格模式StrictMode
(参考链接:https://developer.android.google.cn/reference/android/os/StrictMode),或者使用Profiler
(参考链接:https://developer.android.com/studio/profile/android-profiler?hl=zh-cn)等等不同的方式进行内存泄露的检查。本文记录Profiler
进行内存泄露检查的使用方式。
需要注意的是本篇文章采用了Android Studio新版的UI进行操作,具体开启方式为Preferences->Appearance & Behavior ->New UI 。然后勾选Enable new UI并重启Android Studio。开发工具版本为
Android Studio Giraffe | 2022.3.1 Patch 4
Build #AI-223.8836.35.2231.11090377, built on November 14, 2023
Runtime version: 17.0.6+0-17.0.6b829.9-10027231 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
目前为最新版本开发工具。
测试工具为红米K60,版本为Android13
如需打开 Profiler 窗口,请依次选择 View > Tool Windows > Profiler,或点击工具栏中的 Profile 图标 。
二、内存泄露的排查方式
当通过正常启动应用或者通过如下方式启动应用后
会看到如下页面
然后选择Memory选项卡进行双击打开,会看到如下页面
选择Capture heap dump。然后点击Record进行录制需要的功能。这个功能录制完会自动停止,然后停止后的页面如下(这个会自动停止好像跟之前的不太一样,不知道是不是升级后的改动)
可以看到最上层有Leaks
的标志,表示内存泄漏数量。点击该位置后可以查看内存泄漏的位置
选择第一个内存泄漏的类双击后,然后保持和如图一直都页面,可以看到内存泄漏路径
有的信息比较浅显就能看出问题,有的则不能,比如如图所示的内存泄漏问题,第一个类的的最终泄漏源是在GoogleBannerAdFragment
类里面的广告使用上面,这里不再进行解释,每个项目的分析方式不一样,这里不再赘述。
三、参考链接
- 应用性能指南
- StrictMode
- Android Profiler