Android記憶體管理問題

在開發常常遇到java.lang.OutOfMemoryError: bitmap size exceeds VM budget甚至有時候程式執行到一半時,程式會突然重開,甚至關閉電源。
在Android裡,每new出一個實體時、做了太多的指派(Reference),在heap裡都會占用記憶體。

大部份的Android硬體裝置,native heap都分配了16MB左右的空間,但是隨著每臺硬體配備的不同,真正能用的記憶體大小,又會低於16MB。一占超出了這個使用空間,就會很容易丟出OutOfMemoryError這個錯誤訊息。

最常發生的時候就是在new一個圖檔Bitmap時,Android在載入Bitmap時,每個圖點的換算是很耗記憶體的,圖檔尺寸越大,所占的記憶體也越大
Android在繪圖時,每一個圖檔的算法是︰
圖檔的長*寬*圖檔類型
例如:177px x 111px x RGB8888(32bits=4Bytes)=177x111x4/1024=76KB
解決方法:
1.壓縮圖檔 -> 品質下降
2. 調整尺寸
3. 運用Bitmap類裡的recycle()

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s