我編寫了一個函數來阻止調用Bitmap.createBitmap()(如果它會拋出OutOfMemoryError):位圖大小超出VM預算,但我並不總是工作,該如何糾正?這是一個返回true而不是false的示例: if(isSufficientRAM(width * height)){ 位圖bmp = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888); ... } 公共靜態布爾isSufficientRAM(int長度){ int minRamAfter = 1024 * 1024; // 1048576字節(始終至少留出1MB的可用空間) 長imgSize = length * 4; //在這種情況下,這是31961088字節,因為它是3264 x 2448 argb圖像 long freeRAM = Runtime.getRuntime()。freeMemory(); //當我運行它時這是34415992字節 布爾hasRAM = freeRAM> imgSize + minRamAfter; //這是正確的,因為freeMemory()顯示有足夠的可用RAM 返回hasRAM; } 當我運行它時,該函數將返回true,並且Bitmap.createBitmap()給出以下錯誤。我的isSufficientRAM()函數缺少什麼? 11-15 09:01:47.965:minRamAfter = 1048576 11-15 09:01:47.965:imgSize = 31961088 11-15 09:01:47.970:freeRAM = 34415992 11-15 09:01:48.020:hasRAM = true 11-15 09:01:48.060:D / dalvikvm(2538):GC_EXTERNAL_ALLOC釋放了79K,92%釋放了3850K / 44679K,外部2343K / 3018K,暫停了37ms 11-15 09:01:48.080:E / dalvikvm-heap(2538):31961088字節的外部分配對於此過程而言太大。 11-15 09:01:48.115:E / GraphicsJNI(2538):VM不會讓我們分配31961088字節 11-15 09:01:48.115:D / dalvikvm(2538):GC_FOR_MALLOC釋放了0K,92%釋放了3850K / 44679K,外部2343K / 3018K,暫停了22ms 11-15 09:01:48.115:W / dalvikvm(2538):threadid = 12:線程以未捕獲的異常退出(group = 0x4001e578) 11-15 09:01:48.115:E / AndroidRuntime(2538):致命異常:測試線程名稱 11-15 09:01:48.115:E / AndroidRuntime(2538):java.lang.OutOfMemoryError:位圖大小超出VM預算 11-15 09:01:48.115:E / AndroidRuntime(2538):位於android.graphics.Bitmap.nativeCreate(本機方法) 11-15 09:01:48.115:E / AndroidRuntime(2538):位於android.graphics.Bitmap.createBitmap(Bitmap.java:477)
2020-12-21 09:27:19
“ .discard-answer” ,立即顯示MarkdownHelp:true,enableTables:true,enableSnippets:true }); } }); 感謝您為Stack Overflow提供答案! 請務必回答問題。提供詳細信息並分享您的研究! 但是要避免... 尋求幫助,澄清或回答其他答案。 根據意見發表聲明;用參考或個人經驗來備份它們。 要了解更多信息,請參閱有關編寫出色答案的提示。 草稿已保存 草稿丟棄 註冊或登錄 StackExchange.ready(function(){ StackExchange.helpers.onClickDraftSave('#login-link'); }); 使用Google註冊 使用Facebook註冊 使用電子郵件和密碼註冊 提交 以訪客身份發布 名稱 電子郵件 必需,但從未顯示 StackExchange.ready( 函數(){ StackExchange.openid.initPostLogin('。new-post-login','https%3a%2f%2fstackoverflow.com%2fquestions%2f13393264%2fgetruntime-freememory-available-but-still-vm-wont-let-us-allocate- 31961088%23new-answer','question_page'); } ); 以訪客身份發布 名稱 電子郵件 必需,但從未顯示 發表您的答案 丟棄 點擊“發布答案”,即表示您同意我們的服務條款,隱私政策和Cookie政策 瀏覽標記為android內存的其他問題,或提出您自己的問題。