在我的应用程序中,我从JPEG和PNG文件中加载了一些图像。当我将所有这些文件放入资产目录并以这种方式加载时,一切都正常:
InputStream stream = getAssets().open(path);
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, null);
stream.close();
return new BitmapDrawable(bitmap);
但是当我尝试从SD卡加载完全相同的图像时,会出现OutOfMemory异常!
InputStream stream = new FileInputStream("/mnt/sdcard/mydata/" + path);
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, null);
stream.close();
return new BitmapDrawable(bitmap);
这是日志中的内容:
11-05 00:53:31.003: ERROR/dalvikvm-heap(13183): 827200-byte external allocation too large for this process.
11-05 00:53:31.003: ERROR/GraphicsJNI(13183): VM won't let us allocate 827200 bytes
...
11-05 00:53:31.053: ERROR/AndroidRuntime(13183): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-05 00:53:31.053: ERROR/AndroidRuntime(13183): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
...
为什么会发生这种情况?
更新:在真实设备上尝试了这两个方法 - 看来我无法将超过12MB的位图加载到所谓的“外部存储器”中(这不是SD卡)。