性能優(yōu)化4--Bitmap內(nèi)存優(yōu)化
1.Bitmap在Android虛擬機中的內(nèi)存分配
1 在Android3.0之前,Bitmap的內(nèi)存分配分為兩部分,一部分是分配在Dalvik的VM堆中。而像素數(shù)據(jù)的內(nèi)存是分配在Native堆中,而到了Android3.0之后。Bitmap的內(nèi)存則已經(jīng)所有分配在VM堆上。這兩種分配方式的差別在于,Native堆的內(nèi)存不受Dalvik虛擬機的管理。我們想要釋放Bitmap的內(nèi)存,必須手動調(diào)用Recycle方法。而到了Android 3.0之后的平臺,我們就能夠?qū)itmap的內(nèi)存全然放心的交給虛擬機管理了,我們僅僅須要保證Bitmap對象遵守虛擬機的GC Root Tracing的回收規(guī)則就可以。
2.緩存
有時候,可能需要在一個Activity里多次用到同一張圖片。比如一個Activity會展示一些用戶的頭像列表,而如果用戶沒有設(shè)置頭像的話,則會顯示一個默認頭像,而這個頭像是位于應(yīng)用程序本身的資源文件中的。
如果有類似上面的場景,就可以對同一Bitmap進行緩存。如果不進行緩存,盡管看到的是同一張圖片文件,但是使用BitmapFactory類的方法來實例化出來的Bitmap,是不同的Bitmap對象。緩存可以避免新建多個Bitmap對象,避免內(nèi)存的浪費。
經(jīng)驗分享:
Web開發(fā)者對于緩存技術(shù)是很熟悉的。其實在Android應(yīng)用開發(fā)過程中,也會經(jīng)常使用緩存的技術(shù)。這里所說的緩存有兩個級別,一個是硬盤緩存,一個是內(nèi)存緩存。比如說,在開發(fā)網(wǎng)絡(luò)應(yīng)用過程中,可以將一些從網(wǎng)絡(luò)上獲取的數(shù)據(jù)保存到SD卡中,下次直接從SD卡讀取,而不從網(wǎng)絡(luò)中讀取,從而節(jié)省網(wǎng)絡(luò)流量。這種方式就是硬盤緩存。再比如,應(yīng)用程序經(jīng)常會使用同一對象,也可以放到內(nèi)存中緩存起來,需要的時候直接從內(nèi)存中讀取。這種方式就是內(nèi)存緩存。
3.壓縮
浙公網(wǎng)安備 33010602011771號