從事Android開發(fā)的同學都知道移動設備的內(nèi)存使用是非常敏感的話題,今天我們來看下如何使用軟引用與弱引用來優(yōu)化內(nèi)存使用。下面來理解幾個概念。

1.StrongReference(強引用)

   強引用是我們最最常見的一種,一般我們在代碼中直接通過new出來的對象等,都是強引用,強引用只要存在沒有被銷毀,內(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)存嚴重不足的情況下會被系統(tǒng)回收,如果該對象可能會經(jīng)常使用的,就盡量用軟引用。因此,這一點可以很好地用來解決OOM的問題,并且這個特性很適合用來實現(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(弱引用)

  弱引用也是用來描述非必需對象的,當JVM進行垃圾回收時,無論內(nèi)存是否充足,都會回收被弱引用關聯(lián)的對象,WeakReference 的強度又明