我遇到了以下问题。我的资产文件夹中有大图像。当用户首次打开应用程序时,我会为其设备优化这些图像并将其缓存到SD。
我使用以下命令从资产打开文件:
stream = getResources().getAssets().open("assetName");
我将其包装在BufferedInputStream
中BufferedInputStream bis = new BufferedInputStream(stream, BUFFER_SIZE);
然后我只用BitmapFactory解码图像并用结果做所有的事情。好吧,我实际上习惯将inSampleSize传递给更小的设备,但之后我选择存储半尺寸版本的图像以及fullsize,因为它大大提高了图像解码速度(我怀疑是由于IO操作)。
我遇到的问题是我收到BitmapFactory.decodeStream
为它们返回null的异常(很少见,但仍然存在)。我不明白为什么。我的报告来自Android 4.0.3 galaxy note用户,它足够强大,可以显着保留大约4 Mb的图像数据。所以我怀疑这是OOM,还是“执行虚拟机预算”。如果缺少资产,getAssets().open(...)
可能会抛出异常。
感谢。