【Android-加载图片】解决加载过大图片出现的OOM现象

在加载过大的图片时可能就会出现OOM现象,即“out of memory”内存用完的现象。为了防止该现象的出现。
主要解决思路是:根据图片和控件的大小,来动态的裁减图片,达到节省内存的效果。

实现代码:

//处理大图片,思路:变为bitmap处理
//根据控件的大小,来动态的计算sample值

ImageView imageView = findViewById(R.id.result_image);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;  //如果是true,就会返回null,控件信息就可以拿到了,此时大图片的信息是不载入内存的
BitmapFactory.decodeResource(getResources(), R.mipmap.picture0, options);

//拿到控件的尺寸
int width = options.outWidth;
int height = options.outHeight;

//拿到图片的大小
int measuredHeight = imageView.getMeasuredHeight();
int measuredWidth = imageView.getMeasuredWidth();

int sampleSize; //设置采样率,当值大于1,原生图片就会被裁减,返回一个较小的值节省内存

//图片的宽度/控件的宽度;图片的高度/控件的高度
//都取两者的最小值
//当图片比控件小的时候就等于1,默认为1,就不会放大,不会缩小
if (width < measuredWidth || height < measuredHeight) {
    sampleSize = 1;
} else {
    //如果图片比控件大,就要进行缩小/降低采样的计算
    int scaleX = width / measuredWidth;
    int scaleY = height / measuredHeight;
    sampleSize = scaleX > scaleY ? scaleX : scaleY;
}
options.inSampleSize=sampleSize;
options.inJustDecodeBounds=false;   //当设置成false的时候才载入内存,此时采样率已经降低了
Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.mipmap.picture0,options);
imageView.setImageBitmap(bitmap);

你可能感兴趣的:(Android学习,#,网络编程,android,oom)