我遇到了以下问题。我的资产文件夹中有大图像。当用户第一次打开应用程序时,我会针对他们的设备优化这些图像并将其缓存到 SD。
我使用以下命令从资产中打开文件:
stream = getResources().getAssets().open("assetName");
我包装在 BufferedInputStream
BufferedInputStream bis = new BufferedInputStream(stream, BUFFER_SIZE);
然后我只是用 BitmapFactory 解码图像并用结果做所有的事情。好吧,我实际上曾经为较小的设备传递 inSampleSize,但后来我选择将图像的半尺寸版本与全尺寸一起存储,因为它大大提高了图像解码速度(我怀疑是由于 IO 操作)。
我遇到的问题是我收到BitmapFactory.decodeStream
为它们返回 null 的异常(很少见,但仍然如此)。我不明白为什么。我收到的报告来自 Android 4.0.3 Galaxy Note 用户,它的功能强大到足以保留大约 4 Mb 的图像数据。所以我怀疑这是 OOM,或者“超出 VM 预算”。如果资产丢失,getAssets().open(...)
可能会抛出异常。
然后呢?有没有人遇到过类似的问题?
谢谢。