在我的應用程序用戶選擇圖像和程序讓用戶對圖像進行更改。由於有很多不同的Android設備,我的程序在一些堆大小較小的設備上崩潰。我想計算用戶手機的最佳尺寸,以免虛擬機預算崩潰。我添加了「Picsay Pro」的屏幕截圖,它正在製作我正在尋找的內容。我知道「BitmapFactory.Options」,我唯一的問題是找到一種方法來決定圖像尺寸,因爲VM預算不會讓應用程序崩潰。如何選擇最佳圖像大小不超過虛擬機預算?
回答
計算的剩餘可用空間在手機上:
long freeMemory = (Runtime.getRuntime().maxMemory()) - (Debug.getNativeHeapAllocatedSize());
其中,
調用Runtime.getRuntime ().maxMemory() - 返回總堆限制大小(以字節爲單位)。
Debug.getNativeHeapAllocatedSize() - 返回應用程序已使用的數據量(以字節爲單位)。
計算你用這個公式使用位圖的大小,
long Bytes_allocated = (height of the Image) * (width of the Image) * 4;
比較freeMemory
和Bytes_allocated
選擇適合您的應用程序此時,相應的大小。
其實我最終壓縮在手機上的圖像有兩個原因。一個是上傳速度,另一個是堆問題。你可以嘗試做類似的事情,或者至少發佈堆棧跟蹤!
到目前爲止,我還沒有找到任何可靠的方式來處理圖像大小vs可用內存。問題是內存變得非常快速碎片化,所以你可以有10 MB的空間,但沒有連續的2 MB空間。真正需要的是最大的可用空間的大小,但似乎沒有任何方法可以實現。更好的辦法是對內存進行碎片整理,但是也沒有這樣的功能。
如果您的可用內存小於映像,那麼如果您嘗試使用該映像,則可以確定它會崩潰,因此在使用它之前至少應該檢查一下它的優點。
2012年底的平板電腦現在擁有1920x1280的分辨率,現在我們需要20MB的連續內存來存放單張背景圖片!看起來其中一些平板電腦現在允許堆積高達256MB,但是雖然拋出更多虛擬機空間似乎解決了它,但我們確實需要內存碎片整理程序或預留空間的方法。
如果圖像大小沒有縮放或修改,並且每個更改的圖像大小相同,並且您的應用僅限於Android 3,則有一個技巧可能會有所幫助。0+:
Options opt2 = new BitmapFactory.Options();
opt2.inBitmap = mBitmap; // reuse mBitmap to reduce out of memory errors
mBitmap = BitmapFactory.decodeResource(getResources(), myDrawable, opt2);
這將重新使用相同的內存區域mBitmap的圖像。
- 1. 位圖大小超過虛擬機預算java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 2. 單車圖像 - 位圖大小超過虛擬機預算
- 3. OutOfMemoryError:位圖大小超過虛擬機預算(不是圖像大小問題)
- 4. 如何解決位圖大小超過虛擬機預算
- 5. Android OutOfMemoryError:位圖大小超過虛擬機預算
- 6. 位圖大小超過虛擬機預算
- 7. Android中的位圖大小超過虛擬機預算
- 8. Android ListView OutOfMemoryError:位圖大小超過虛擬機預算
- 9. Android位圖大小超過虛擬機預算錯誤
- 10. java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 11. 逐幀動畫java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 12. ViewFlipper:位圖大小超過虛擬機預算
- 13. 「位圖大小超過虛擬機預算」
- 14. Android錯誤:java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 15. 位圖大小超過虛擬機預算內存錯誤
- 16. 位圖大小超過虛擬機預算在android
- 17. java.lang.OutOfMemoryError:位圖大小超過虛擬機預算
- 18. 質量顯示圖像 - 位圖大小超過虛擬機預算錯誤
- 19. Android:加載圖像時出錯:OutOfMemoryError:位圖大小超過虛擬機預算
- 20. 內存不足 - 位圖大小超出虛擬機預算
- 21. 如何回收位圖? - 位圖大小超過虛擬機預算
- 22. 如何處理java.lang.OutOfMemoryError位圖大小超過虛擬機預算pageradapter?
- 23. 位圖大小超過虛擬機預算...如何解決這個錯誤?
- 24. 如何解決「java.lang.OutOfMemoryError:位圖大小超過虛擬機預算」的錯誤android
- 25. 如何克服「位圖大小超過虛擬機預算」的錯誤?
- 26. BitMap大小超過虛擬機的預算Android
- 27. GoogleMap/Custombitmap Tiles負載大小超過虛擬機預算java.lang.OutOfMemoryError:
- 28. Android自定義視圖位圖大小超過虛擬機預算
- 29. OutOfMemoryException:位圖超出虛擬機預算
- 30. ImageView:OutOfMemoryError:位圖大小超過虛擬機鎖定設備上的預算