废话不多说直接说流程
给项目中集成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、内存和网络
使用
的实时...