1.Bitmap在Android虛擬機中的記憶體分配 1 在Android3.0之前,Bitmap的記憶體分配分為兩部分,一部分是分配在Dalvik的VM堆中。而像素數據的記憶體是分配在Native堆中,而到了Android3.0之後。Bitmap的記憶體則已經所有分配在VM堆上。這兩種分配方式的差別在於, ...
1.Bitmap在Android虛擬機中的記憶體分配
1 在Android3.0之前,Bitmap的記憶體分配分為兩部分,一部分是分配在Dalvik的VM堆中。而像素數據的記憶體是分配在Native堆中,而到了Android3.0之後。Bitmap的記憶體則已經所有分配在VM堆上。這兩種分配方式的差別在於,Native堆的記憶體不受Dalvik虛擬機的管理。我們想要釋放Bitmap的記憶體,必須手動調用Recycle方法。而到了Android 3.0之後的平臺,我們就能夠將Bitmap的記憶體全然放心的交給虛擬機管理了,我們僅僅須要保證Bitmap對象遵守虛擬機的GC Root Tracing的回收規則就可以。View Code
2.緩存
有時候,可能需要在一個Activity里多次用到同一張圖片。比如一個Activity會展示一些用戶的頭像列表,而如果用戶沒有設置頭像的話,則會顯示一個預設頭像,而這個頭像是位於應用程式本身的資源文件中的。
如果有類似上面的場景,就可以對同一Bitmap進行緩存。如果不進行緩存,儘管看到的是同一張圖片文件,但是使用BitmapFactory類的方法來實例化出來的Bitmap,是不同的Bitmap對象。緩存可以避免新建多個Bitmap對象,避免記憶體的浪費。
經驗分享:
Web開發者對於緩存技術是很熟悉的。其實在Android應用開發過程中,也會經常使用緩存的技術。這裡所說的緩存有兩個級別,一個是硬碟緩存,一個是記憶體緩存。比如說,在開髮網絡應用過程中,可以將一些從網路上獲取的數據保存到SD卡中,下次直接從SD卡讀取,而不從網路中讀取,從而節省網路流量。這種方式就是硬碟緩存。再比如,應用程式經常會使用同一對象,也可以放到記憶體中緩存起來,需要的時候直接從記憶體中讀取。這種方式就是記憶體緩存。
View Code
3.壓縮
https://www.jb51.net/article/36631.htm