從事Android開發(fā)的同學(xué)都知道移動(dòng)設(shè)備的內(nèi)存使用是非常敏感的話題,今天我們來看下如何使用軟引用與弱引用來優(yōu)化內(nèi)存使用。下面來理解幾個(gè)概念。
1.StrongReference(強(qiáng)引用)
強(qiáng)引用是我們最最常見的一種,一般我們在代碼中直接通過new出來的對象等,都是強(qiáng)引用,強(qiáng)引用只要存在沒有被銷毀,內(nèi)存就不會被系統(tǒng)回收。我們以生成Bitmap為例如下:
Bitmap imageBitmap = readBitmapFromResource(getResources(), R.mipmap.bg_post_activity_5);
生成Bitmap代碼:
public Bitmap readBitmapFromResource(Resources resources, int resourcesId) { BitmapFactory.Options options = new BitmapFactory.Options(); return BitmapFactory.decodeResource(resources, resourcesId, options); }
2.SoftReference(軟引用)
軟引用是用來描述一些有用但并不是必需的對象,在內(nèi)存嚴(yán)重不足的情況下會被系統(tǒng)回收,如果該對象可能會經(jīng)常使用的,就盡量用軟引用。因此,這一點(diǎn)可以很好地用來解決OOM的問題,并且這個(gè)特性很適合用來實(shí)現(xiàn)緩存:比如網(wǎng)頁緩存、圖片緩存等。這里還是以緩存Bitmap為例:
SoftReference<Bitmap> softReference = new SoftReference<Bitmap>(readBitmapFromResource(getResources(), R.mipmap.bg_post_activity_5)); Bitmap bitmap = softReference.get();
3.WeakReference(弱引用)
弱引用也是用來描述非必需對象的,當(dāng)JVM進(jìn)行垃圾回收時(shí),無論內(nèi)存是否充足,都會回收被弱引用關(guān)聯(lián)的對象,WeakReference 的強(qiáng)度又明