在我的应用程序中,我加载了来自JPEG和PNG文件的几个图像。当我把所有这些文件转化为资产目录,并以这种方式加载它,一切都很好:从外部存储器加载位图时发生OutOfMemory异常
InputStream stream = getAssets().open(path);
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, null);
stream.close();
return new BitmapDrawable(bitmap);
但是,当我尝试从SD卡中加载完全相同的图像,我得到一个内存不足的异常!
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卡)。
在什么条件下,你测试上面的代码?在仿真器,或真正的设备连接USB?有可能您的USB模式设置为锁定SD卡的磁盘模式。 – xandy 2010-11-05 00:59:36
我在模拟器中运行这段代码。 – Fixpoint 2010-11-05 07:37:19
jpg/png文件的大小是多少? – Fedor 2010-11-08 08:10:50