MIUI添加内存调试工具:查看进程中的Bitmap信息
来源:互联网 发布:莆田电视台 网络直播 编辑:程序博客网 时间:2024/06/05 05:07
转自:http://weibo.com/p/1001603861561121895630
Android开发中的内存管理一直是令人头痛的事情。其中占用内存最大的一般是Bitmap。
在上周五发布的MIUI开发版中,我添加了查看内存里Bitmap信息的功能。大家开发app的时候可以使用这个功能来查看分析app中的Bitmap情况。
使用方法:adb shell dumpsys gfxinfo [package name] [-b] [-e]
adb shell dumpsys gfxinfo是Android原有的功能。我在此之上添加了一些参数来输出Bitmap信息。
-b会输出进程中所有内存大于阈值(默认100k)的Bitmap信息,格式:
[哈希值] [内存大小] [宽]x[高] [如果是preload则显示为preload] [图片资源/文件名称,可能是空]
例如,adb shell dumpsys gfxinfo com.android.systemui -b:
All big bitmaps (debug.bitmap_threshold_size = 100 k):
0x42da9af8 2,477k 1566x405 res/drawable-xxhdpi/overscroll_glow.png
...
Total count: 16, size: 25M
-e会将Bitmap保存在手机里。
例如,adb shell dumpsys gfxinfo com.android.systemui -e:
[其他的同上,但会多一行]:
Export bitmaps finished. Path: /data/data/com.android.systemui/cache/_exportbitmap/com.android.systemui
由于保存Bitmap比较耗时,可能会报错:Failure while dumping the app: ProcessRecord{4334ef80 1271:com.android.systemui/1000}
这没关系,在logcat里等到:D/DumpBitmapInfo( 1271): Export bitmaps finished. Path: /data/data/com.android.systemui/cache/_exportbitmap/com.android.systemui
这就表示完成了。然后可以通过
adb pull /data/data/com.android.systemui/cache/_exportbitmap/com.android.systemui 来取到电脑上查看。
高级参数 --nogc 指定不在dump之前调用一次GC(也就是说默认情况下会在dump之前触发一次GC)。
高级参数 --includepreload 指定包含preload的图片(也就是说默认情况下不会输出preload的图片)。
高级参数 --recycle:[Bitmap的hashcode] 通过这个可以recycle指定的Bitmap,来检验某个Bitmap是否会被使用。
可以通过更改prop: debug.bitmap_threshold_size 来更改阈值,默认100,单位K,只有大于等于它的才会显示出来。更改后要杀死进程重新启动app才会生效。
例如:adb shell setprop debug.bitmap_threshold_size 10
我们可以经常使用这个方法来查看内存中Bitmap的情况是否符合预期,当发现我们认为不应该存在的Bitmap,我们需要更改程序不让它加载或让它及早释放。
有时候我们不知道这个Bitmap是在哪里使用的,那么我们可以结合MAT(Eclipse Memory Analysis Tools)来找出其引用来源。
另外在OutOfMemoryError出现的时候或我们认为有内存泄露的时候,如果泄露的对象有Bitmap,那我们也可以用这个方法来分析。
另外在OutOfMemoryError出现的时候或我们认为有内存泄露的时候,如果泄露的对象有Bitmap,那我们也可以用这个方法来分析。
步骤:
1. adb shell dumpsys gfxinfo [包名] -b 。找出泄露的图片,记下其hashcode。(目前在64位系统的手机上不能使用这个方法,其hashcode和MAT里的标识不对应)
2. DDMS里Dump HPROF file。打开MAT视图的Histogram > 找到Bitmap > List Object, with outgoing references > 通过上面的hashcode找到对应的Bitmap > Merge Shortest paths to GC Roots, exclude all .... 这样就找到了持有这个Bitmap的根。(小提示,在列表里找指定项的方法:在最下面那行"Total..."上按右键,选Expand All,键盘上输入要找的内容,如:“graphics.Bitmap”,然后按Esc键,这时就会选中Bitmap项。)
0 0
- MIUI添加内存调试工具:查看进程中的Bitmap信息
- vs2008调试添加查看内存
- vs2008调试添加查看内存
- 查看Android进程内存资源信息
- 查看Android进程内存资源信息
- 查看MAT中的bitmap
- ubuntu下载串口调试工具,查看串口信息
- ubuntu下载串口调试工具,查看串口信息
- Linux 查看系统信息命令 cpu、内存、进程、硬盘、网卡
- 查看进程占用内存cpu信息,Linux命令—TOP
- 查看进程占用内存cpu信息,Linux命令—TOP
- Linux下进程的内存相关信息的查看
- 【测试工具】Linux下查看指定进程的内存总和
- 查看调试信息
- inux 查看进程信息
- linux 查看进程信息
- 进程信息查看
- 查看进程的信息
- 局域网访问IIS express
- 随机过程总结
- Spring MVC 教程,快速入门,深入分析
- GRE写作必备句型
- iOS开发中的sqlite数据库
- MIUI添加内存调试工具:查看进程中的Bitmap信息
- Xcode调试断点不能停在代码区终极解决方案
- 2012年5月SAT香港真题解析
- 为自己记------android中listview下拉刷新和下拉加载的原理及简单实现
- 手机触摸 事件, 当触摸屏幕时候触发
- UVA 621 Secret Research
- 第一次接触安卓开发
- 使用UiAutomator中swipe(Point[], int)方法绘制解锁图案
- iphone/ipad如何获取本机序列号和设备标示