在我的應用程序中,我加載了來自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