Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Moosphan opened this issue · comments

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

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

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

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

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