本文介绍了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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 14:12
查看更多