miui dump bitmap tool 介绍

20
DumpBitmapTool 介介 介介

Upload: zhucai1234

Post on 18-Aug-2015

58 views

Category:

Software


9 download

TRANSCRIPT

Page 1: MIUI Dump Bitmap Tool 介绍

DumpBitmapTool 介绍

朱才

Page 2: MIUI Dump Bitmap Tool 介绍

目的• 了解内存中 Bitmap 的情况,发现不应该在

内存中的 Bitmap

• 发现内存泄露,找出泄露原因

Page 3: MIUI Dump Bitmap Tool 介绍

使用方法• adb shell dumpsys gfxinfo [package name] [-b] [-e]

Page 4: MIUI Dump Bitmap Tool 介绍

-b

• -b 会输出进程中所有内存大于阈值(默认 100k )的 Bitmap 信息,格式:

• [ 哈希值 ] [ 内存大小 ] [ 宽 ]x[ 高 ] [ 如果是 preload 则显示为 preload] [ 图片资源 / 文件名称,可能是空 ]

Page 5: MIUI Dump Bitmap Tool 介绍

-badb shell dumpsys gfxinfo com.android.systemui -e:

All big bitmaps (debug.bitmap_threshold_size = 100 k): 0x4397e9c0 123k 178x178 res/drawable-xxhdpi/ic_notify_quicksettings_normal.png 0x4393f460 123k 178x178 res/drawable-xxhdpi/ic_notify_clear_normal.png 0x43920138 123k 178x178 res/drawable-xxhdpi/ic_notify_clear.png 0x43af06d8 144k 192x192 /data/system/customized_icons/android.png 0x437e9180 144k 192x192 0x464b0fb8 144k 192x192 /data/system/customized_icons/com.taou.maimai.png 0x447d55a8 144k 192x192 /data/system/customized_icons/com.baidu.BaiduMap.png 0x43473138 8,100k 1080x1920 Total count: 17, size: 10M

Page 6: MIUI Dump Bitmap Tool 介绍

-e

• -e 会将 Bitmap 保存在手机里。• 会额外多一行:• Export bitmaps finished. Path: /data/data/com.android.systemui/cache/_exportbitmap/

com.android.systemui

• 这一行也会输出在 logcat 里。• 然后可以 adb pull ... 来取到电脑里看。

Page 7: MIUI Dump Bitmap Tool 介绍

高级参数• --nogc 指定不在 dump 之前调用一次 GC (也就

是说默认情况下会在 dump 之前触发一次 GC )。

• --includepreload 指定包含 preload 的图片(也就是说默认情况下不会输出 preload 的图片)。

• --recycle:[Bitmap 的 hashcode] 通过这个可以recycle 指定的 Bitmap ,来检验某个 Bitmap 是否会被使用。

Page 8: MIUI Dump Bitmap Tool 介绍

debug.bitmap_threshold_size

• 可以通过更改 prop: debug.bitmap_threshold_size 来更改阈值,默认 100 ,单位 K ,只有大于等于它的才会显示出来。更改后要杀死进程重新启动 app 才会生效。

• 例: adb shell setprop debug.bitmap_threshold_size 10

Page 9: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 有时候我们不知道这个 Bitmap 是在哪里使

用的,那么我们可以结合 MAT ( Eclipse Memory Analysis Tools )来找出其引用来源。 (64 位系统设备目前不支持 )

• 另外在 OutOfMemoryError 出现的时候或我们认为有内存泄露的时候,如果泄露的对象有 Bitmap ,那我们也可以用这个方法来分析。

Page 10: MIUI Dump Bitmap Tool 介绍

反查被谁引用adb shell dumpsys gfxinfo com.android.systemui -e:

All big bitmaps (debug.bitmap_threshold_size = 100 k): 0x4397e9c0 123k 178x178 res/drawable-xxhdpi/ic_notify_quicksettings_normal.png 0x4395f688 123k 178x178 res/drawable-xxhdpi/ic_notify_quicksettings_pressed.png 0x4393f460 123k 178x178 res/drawable-xxhdpi/ic_notify_clear_normal.png 0x43920138 123k 178x178 res/drawable-xxhdpi/ic_notify_clear.png 0x43af06d8 144k 192x192 /data/system/customized_icons/android.png 0x437e9180 144k 192x192 0x464b0fb8 144k 192x192 /data/system/customized_icons/com.taou.maimai.png 0x447d55a8 144k 192x192 /data/system/customized_icons/com.baidu.BaiduMap.png 0x43473138 8,100k 1080x1920 Total count: 17, size: 10M

Page 11: MIUI Dump Bitmap Tool 介绍

反查被谁引用• Eclipse 安装 MAT 。

Page 12: MIUI Dump Bitmap Tool 介绍

反查被谁引用• Dump HPROF file

Page 13: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 选择 Histogram

Page 14: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 在界面中最下面一行“ Total: 26 of 5,025 entires;4,99 mo

re” 右键,在弹出的菜单中选择“ Expand All”

Page 15: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 随便点击一下列表,然后用键盘敲击:“ graphics.Bitma

p” ,然后按 Esc ,光标会选中 Bitmap 。

Page 16: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 在 Bitmap 项上按右键,选择“ List objects” -> “with inco

ming references” 。• 然后同之前一样,展开下面所有项。(右键最下面, Exp

and All )

Page 17: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 复制之前找出的 Bitmap 的 hashcode : 43473138 。随

便点击一下列表,键盘随便敲击一个字母,再删除,再按“ Ctrl+V” 。再按“ Esc” 键。

Page 18: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 对应的 Bitmap 已经找到。这时我们在这项上按右键,选

择“ Merge Shortest Paths to GC Roots” -> “exclude all phantom/weak/soft etc. references” 。

Page 19: MIUI Dump Bitmap Tool 介绍

反查被谁引用• 这样我们就找到了引用此 Bitmap 的根。我们逐级点开左

边的三角,就可以知道这条引用链。

Page 20: MIUI Dump Bitmap Tool 介绍

谢谢观赏!

朱才 [email protected]