读书人

surfaceview以致gallery2内存泄露

发布时间: 2012-11-08 08:48:11 作者: rapoo

surfaceview导致gallery2内存泄露

当从相机进入图库时,再退出,发现内存泄露。

发现内存泄露的方法是:

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,不过可以再应用规避。

读书人网 >移动开发

热点推荐