本文介绍了Android的位图的OutOfMemoryError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有我的VSD220一个OutOfMemoryError(这是一个22基于Android的多合一)
为(ImageView的IMG:listImages){
System.gc()的; 位图MYBITMAP = BitmapFactory.de codeFILE(路径);
img.setImageBitmap(MYBITMAP);
img.setOnClickListener(本);
}
我真的不知道该怎么办,因为这个形象是最大分辨率之下。图像尺寸为一些关于(1000×1000),显示这是1920×1080。
任何帮助吗?
(这的foreach循环进行约20个元素,它GOTS 6或7圈后破裂。)
非常感谢。
埃塞基耶尔。
解决方案
您应该看一看为的。根据您的操作系统版本,可以使用不同的技术,让您可以管理更多的位图,但你可能会无论如何都要改变你的code。
在特定的,你很可能将不得不在使用code的修订版的,但我至少发现这部分是特别有用的:
公共静态INT calculateInSampleSize(
BitmapFactory.Options选项,诠释reqWidth,诠释reqHeight){
//原始高度和图像宽度
最终诠释身高= options.outHeight;
最终诠释宽度= options.outWidth;
INT inSampleSize = 1; 如果(高度> reqHeight ||宽度GT; reqWidth){ //计算的高度和宽度的比率要求的高度和宽度
最终诠释heightRatio = Math.round((浮点)高度/(浮点)reqHeight);
最终诠释widthRatio = Math.round((浮点)宽/(浮点)reqWidth); //选择最小比率inSampleSize值,这将保证
//使用两个维度大于或等于所述最终图像
//请求的高度和宽度。
inSampleSize = heightRatio< widthRatio? heightRatio:widthRatio;
} 返回inSampleSize;
}公共静态位图德codeSampledBitmapFromResource(资源RES,INT渣油,
INT reqWidth,诠释reqHeight){ //首先去code。与inJustDe codeBounds = true来检查尺寸
最后BitmapFactory.Options选项=新BitmapFactory.Options();
options.inJustDe codeBounds = TRUE;
BitmapFactory.de codeResource(RES,渣油,期权); //计算inSampleSize
options.inSampleSize = calculateInSampleSize(选项,reqWidth,reqHeight); //德code位与inSampleSize集
options.inJustDe codeBounds = FALSE;
返回BitmapFactory.de codeResource(RES,渣油,期权);
}
mImageView.setImageBitmap(
decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));
这篇关于Android的位图的OutOfMemoryError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!