1856
18914
我編寫了一個函數來阻止調用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) 
“ .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內存的其他問題,或提出您自己的問題。