轉自:http://blog.163.com/hero_213/blog/static/39891214201412621834253/
Android中有四種,分別是:
ALPHA_8:每個像素佔用1byte內存
ARGB_4444:每個像素佔用2byte內存
ARGB_8888:每個像素佔用4byte內存
RGB_565:每個像素佔用2byte內存
Android默認的顏色模式爲ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,佔用的內存也最大。
舉例說明一個32位的PNG也就是ARGB_8888,像素是1204*1024,那麼佔用空間是:
1024*1024*(32/8)
因爲8bit = 1 byte, 32位就是4byte. 我們在解析圖片的時候爲了方式oom最好使用ARGB_4444模式. 節省一半的內存空間.
===================================================================
Android中一張圖片(BitMap)佔用的內存主要和以下幾個因數有關:圖片長度,圖片寬度,單位像素佔用的字節數。
一張圖片(BitMap)佔用的內存=圖片長度*圖片寬度*單位像素佔用的字節數
注:圖片長度和圖片寬度的單位是像素。
圖片(BitMap)佔用的內存應該和屏幕密度(Density)無關,雖然我暫時還拿不出直接證據。
ARGB指的是一種色彩模式,裏面A代表Alpha,R表示red,G表示green,B表示blue,其實所有的可見色都是紅綠藍組成的,所以紅綠藍又稱爲三原色。
A R G B
透明度 紅色 綠色 藍色
![]()
需要注意這裏的圖片佔用內存是指在Navtive中佔用的內存,當然BitMap使用的絕大多數內存就是該內存。
因爲我們可以簡單的認爲它就是BitMap所佔用的內存。
Bitmap對象在不使用時,我們應該先調用recycle(),然後才它設置爲null.
雖然Bitmap在被回收時可以通過BitmapFinalizer來回收內存。但是調用recycle()是一個良好的習慣
在Android4.0之前,Bitmap的內存是分配在Native堆中,調用recycle()可以立即釋放Native內存。
從Android4.0開始,Bitmap的內存就是分配在dalvik堆中,即JAVA堆中的,調用recycle()並不能立即釋放Native內存。但是調用recycle()也是一個良好的習慣。