当从相机进入图库时,再退出,发现内存泄露。
发现内存泄露的方法是:
adb shell
dumpsys SurfaceFlinger
然后可以看到申请的内存
Allocated buffers:
0x1e4dd10: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e72e20: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e73920: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e75600: unknown | 1280 (4096) x 720 | 100 | 0x00000b02
0x1e7d2e0: 276.00 KiB | 720 ( 736) x 96 | 5 | 0x00000b00
0x1e7dfd0: 143.75 KiB | 720 ( 736) x 50 | 5 | 0x00000b00
0x1e81b08: 3076.25 KiB | 720 ( 736) x 1070 | 5 | 0x00000b00
0x1e81f70: 143.75 KiB | 720 ( 736) x 50 | 5 | 0x00000b00
0x1e83000: 7200.00 KiB | 1440 (1440) x 1280 | 5 | 0x00000b00
0x1e83038: 3076.25 KiB | 720 ( 736) x 1070 | 5 | 0x00000b00
0x1e84ea8: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e85c30: 3404.00 KiB | 720 ( 736) x 1184 | 1 | 0x00000933
0x1e861e0: 276.00 KiB | 720 ( 736) x 96 | 5 | 0x00000b00
0x1e91490: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e92b58: unknown | 800 (4096) x 480 | 100 | 0x00000b02
0x1e92ff0: 3404.00 KiB | 720 ( 736) x 1184 | 1 | 0x00000933
Total allocated (estimate): 21000.00 KB
总数一直在增加,解决办法是在退出图库后调用surfaceview的release方法释放内存。
if (mSurfaceHolder != null) { mSurfaceHolder.getSurface().release(); } |
以上内存泄露仅仅是在从camera进入gallery发生,单独进入并退出gallery并不发生,这应该是framework的bug,不过可以再应用规避。