添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

废话不多说直接说流程

给项目中集成LeakCanary工具进行内存泄漏检测。发现有内存泄漏后该工具会进行提示

有内存泄露后我们需要使用as的profiler工具进行分析并获取到.hprof文件,步骤如下

点击如下按钮打开profiler工具

image.png

打开以后如下图,

3571184-f5ba2fc11268fc54.png

我们选择MEMORY,进去以后如下图

image.png

然后我们对有内存泄漏的页面进行反复操作(为了模拟泄漏场景)。然后点击下图1位置的垃圾桶进行强制gc,再点击2的位置获取堆栈信息

image.png

当堆栈信息获取完成后,会弹出如下框,我们将排序方式选为Arrange by package(好定位我们自己的代码),找到我们的代码后我们真的发现,应该已经被回收了的LoginActivity还占用这内存。但是为什么没有被销毁,还有那些对象引用着他。这时我们就需要点击位置为3的地方,导出.hprof文件进行具体分析了

image.png

导出以后我们会得到1.hprof文件,但是这个不是mat工具用到的标准文件。我们需要使用sdk自带的hprof-conv.exe(platform-tools文件夹下) 工具进行转换,转换以后我们就得到了1_mat.hprof文件

转换mat标准文件命令:hprof-conv-zsrcdst例如:hprof-conv-z1.hprof1_mat.hprof

下来我们就需要使用mat进行分析了,打开以后如下图,我们呢点击histogram

image.png

进入Histogram 页面有我们在红框位置输入我们想要找的类,然后右键选择merge shortest paths to Gc roots然后在选择exclude all phantom/weak/soft etc.references选项

image.png

就得到了如下的引用图,从图中我们分析出 loginActivity是被inputMethodManager所引用(这其实是android系统的一个bug),所以我们主要将两者之间的联系给断开就行,解决方法如下

image.png

使用反射的方式将引用的view置为null

转自:https://www.jianshu.com/p/33055ce12d54

1. 打开 AndroidStudio Pro file1.在菜单栏依次点击 View > Tool Windows > Profiler 2.在 Pro file窗口点击左上角的"+"图标,添加要 分析 的进程3.点击MEMORY进入内存详情界面如下图所示一个应用的内存包括:java,native,graphics,stack,code,other,我们这次只对java的内存 进行 分析 2.抓取内存快照... 在 AndroidStudio 3.0中,以前的 Android Monitor 不在了,取而代之的是 Android Profiler ,参照官方文档学习了其 使用 方式,总结如下: 1: Android Profiler 使用 流程: 1.点击 工具 栏的图标即可 打开 Android Profiler 窗口的顶部,如图所示,选择设备 和你想要配置的app进程 当我们连接一个设备后,打 性能优化问题,在我们开发时都会遇到,但是在小厂和对自己要求不严格的情况下,我都很少去做性能优化;在性能优化上,基本大家都是通过自己的开发经验和性能 分析 工具 来发现问题,今天给大家分享一下小编最近 使用 Profiler 工具 。 最近在 分析 app的内存泄露问题研究了下as的 profiler 功能  这里记录下个人心得 内存泄露相关文档:https://juejin.im/post/5a652d31518825734108080d 首先  对于 profiler 基础介绍 :https://blog.csdn.net/gaugamela/article/details/79027538 下面是个人心得 1.首先得出结论pr... 这里就是对包名为com.example.demo这个进程在/data/local/tmp/目录下生成了一个demo.h pro f的 文件 。可以在运行的设备上, 使用 adb命令生成 .h pro f 文件 ,表示在执行命令的那一刻,该进程的内存情况。建议在最开始泄漏前和泄漏之后各采取一次,做对比。 文章目录一、 内存泄漏 定位1、观察法:2、 使用 内存 分析 工具 2-1、收集内存快照2-2、h pro f 文件 转换2-3、 Mat 分析 内存二、内存抖动三、优化内存空间1、减少不必要的内存开销2、 使用 最优的数据类型3、 使用 IntDef和StringDef 替代枚举类型4、图片内存优化5、图片放置优化6、在App可用内存过低时主动释放内存7、item被回收不可见时释放掉对图片的引用四、总结1、 内存泄漏 2、内存抖动3、 使用 轻量级的数据结构 一、 内存泄漏 定位 我们都知道, 内存泄漏 的根本原因就是:堆内存中的长生命周期的对象持有 1、     在运行模拟器的状态下, 打开 DDMS模式,如图1所示,找到“data/data/你项目的包名/datatases/要导出的 文件 ”,选中要导出的 文件 ,点击如图2所示的窗体右上角的“Pull a file from the device”按钮,如图2所示,然后给 文件 命名并选择 文件 的存放位置,即导出数据库中的数据。(呃……截的图太大了,关键的没显示,就是右上角的“DDMS”) 在 Android Profiler 窗口的顶部,如图所示,选择设备①和你想要配置的app进程②当我们连接一个设备后, 打开 Android Pro files运行我们的应用程序时,它会默认选中我们的程序, Android Profiler 显示如图1(图片来自官网): 如果我们连接了多个设备可以在按钮①的位置选择设备,通过按钮②的位置选择想要的app进程, 工具 最底部显示了一个时间轴,其中包含了CPU、内存和网络 使用 的实时...