当我尝试在运行少于WVGA800的仿真器上解码位图时,它工作正常(包括手机)但在较大的屏幕上它会抛出OutOfMemoryError
为什么会这样?屏幕较大的手机会有更多内存吗?
private Bitmap getBitmap(int assetKey) { return BitmapFactory.decodeResource(mContext.getResources(), assetKey); }
答案 0 :(得分:1)
拥有较大显示屏的手机并不总是拥有比手机更小的显示器更多的内存。解码的位图占用大量内存,每个像素占用4个字节的内存。
一般来说,如果位图太大,最好对位图进行下采样。你可以很容易地做到这一点:
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = n; // <-- this only decode every nth pixel
Bitmap b = BitmapFactory.decodeResource(mContext, rId, ops);
答案 1 :(得分:0)
将数据分解为样本通常是一种很好的做法,以避免内存异常。你可以看到以下链接。你必须使用sampleSize超过1.我已经通过这篇文章解决了我的问题。
Strange out of memory issue while loading an image to a Bitmap object