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

1.StrongReference(強引用)

   強引用是我們最最常見的一種,一般我們在代碼中直接通過new出來的對象等,都是強引用,強引用只要存在沒有被銷毀,內存就不會被系統回收。我們以生成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(軟引用)

  軟引用是用來描述一些有用但并不是必需的對象,在內存嚴重不足的情況下會被系統回收,如果該對象可能會經常使用的,就盡量用軟引用。因此,這一點可以很好地用來解決OOM的問題,并且這個特性很適合用來實現緩存:比如網頁緩存、圖片緩存等。這里還是以緩存Bitmap為例:

 SoftReference<Bitmap> softReference = new SoftReference<Bitmap>(readBitmapFromResource(getResources(), R.mipmap.bg_post_activity_5));
 Bitmap bitmap = softReference.get();

3.WeakReference(弱引用)

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

網友評論