Android-Daily-Interview icon indicating copy to clipboard operation
Android-Daily-Interview copied to clipboard

2019-12-09:请谈谈如何加载Bitmap并防止内存溢出?

Open Moosphan opened this issue 6 years ago • 4 comments

Moosphan avatar Dec 09 '19 01:12 Moosphan

首先我们 要知道bitmap内存是怎么计算的例子:

手机屏幕大小 1080 x 1920(inTarget = 420),加载 xhdpi (inDensity = 320)中的图片 1920 x 1080,scale = 420 / 320, 最总我们可以得知 他的占用内存 1418 * 2520 * 4 很明显 被放大了。 防止内存溢出:1对图片进行内存压缩; 2.高分辨率的图片放入对应文件夹; 3.内存复用 4.及时回收

guosen avatar Dec 12 '19 07:12 guosen

PS:
新版本的 bitmap 单独存放在 native 堆, 不在 java 堆了;
使用 inBitmap 属性, Glide 也在用;
@guosen

Alex-Cin avatar Feb 11 '20 01:02 Alex-Cin

这篇文章可以参考下https://juejin.im/entry/5e76df8a518825490b64a506

fuusy avatar Mar 31 '20 14:03 fuusy

先通过BitmapFactory.Options 设置inJustDecodeBounds 不占用内存来获取图片信息 判断是否为大图 根据使用场景计算缩放比较 inJustDecodeBounds设置为false 传递inSampleSize缩放比例压缩图片

mlinqirong avatar Dec 27 '21 06:12 mlinqirong