Android开发中比较需要注意的是内存的消耗,而在平时开发中经常会遇到内存占用大的情况是对Bitmap的处理。 其中的基础之一是如何在保证不消耗过大内存的情况下加载一张大图。这也是面试中经常问的一道基础题。
通常来说在加载Bitmap的过程中导致OOM的原因是要加载的图片太大, 但因为现在屏幕的尺寸都不大,就算是一个高分辨率的图片,以小图加载也就足够了。 所以思路一般是,先获取当前要显示的ImageView区域大小,按大小缩放原图然后加载。
获取Bitmap大小的过程不需要加载整张图片,可以用 BitmapFactory.Options 来获取
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decode***
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
其中 decode方法有很多种,可以根据需要选择不同的实现,比如 stream, file等, 重点是inJustDecodeBounds设置为 true 之后在解析的时候就不会加载到内存了,只获取对应的宽和高。
比方说要把一张 960960的图放到9696的ImageView里,很简单我们应该缩放10倍, 缩放的过程可以用 inSampleSize 这个参数来控制,
public Bitmap getResizedBitmap(File bitmap, int sampleSize) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = sampleSize;
return BitmapFactory.decodeFile(bitmap, options);
}
在真正加载图片的时候 inJustDecodeBounds这个参数需要设置为true, 此时将会真正的消耗内存。
上面这就是Android图片加载的入门技巧了,也是个必备技巧, 在各种初级面试中都会问到,希望能帮到大家。