android的OutOfMemoryError在WVGA800上,而不是任何小屏幕格式



当我尝试在运行低于WVGA800的模拟器上解码位图时,它可以正常工作(包括手机),但在较大的屏幕上,它会抛出OutOfMemoryError

为什么会这样?屏幕更大的手机会有更多的内存吗?

private Bitmap getBitmap(int assetKey) { return BitmapFactory.decodeResource(mContext.getResources(), assetKey); }

屏幕较大的手机并不总是比屏幕较小的手机有更多的内存。解码位图需要大量的内存,每个像素4字节的内存。

一般来说,如果位图太大,下载采样是一个好主意。这很容易做到:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = n; // <-- this only decode every nth pixel
Bitmap b = BitmapFactory.decodeResource(mContext, rId, ops);

将数据分解为样本通常是一种好做法,以避免内存异常。您可以看到下面的链接。你必须让sampleSize大于1。我已经解决了我的问题,按照这篇文章。

加载图像到位图对象时出现内存不足的问题

最新更新