圖片加載<第六篇>:圖片優化之inBitmap

inBitmap是在BitmapFactory中的內部類Options的一個變量,簡單而言,使用該變量可以複用舊的Bitmap的內存而不用重新分配以及銷燬舊Bitmap,進而改善運行效率。

bitmap是很消耗內存的,當bitmap不用時我們需要回收

bitmap.recycle();

以上代碼可以回收bitmap在堆中的內存,回收之後,bitmap不得再重新使用。但是,當我們使用listview加載多張圖片時,我們都知道,listview的Item有複用的特性,必然經常複用bitmap緩存,這時inBitmap的作用尤爲重要。

inBitmap變量是在Android 3.0+版本加入到系統源碼當中,也就意味着inBitmap參數只有在Android 3.0+版本及以上能夠正常使用,當你的app版本低於3.0的時候,只能使用bitmap.recycle()進行Bitmap的回收操作;在Android 3.0+以上根據系統版本的不同,使用inBitmap的規則也不相同,具體區分如下:

  • 4.4之前的版本inBitmap只能夠重用相同大小的Bitmap內存區域。簡單而言,被重用的Bitmap需要與新的Bitmap規格完全一致,否則不能重用。

  • 4.4之後的版本系統不再限制舊Bitmap與新Bitmap的大小,只要保證舊Bitmap的大小是大於等於新Bitmap大小即可。

  • 除上述規則之外,舊Bitmap必須是mutable的,這點也很好理解,如果一個Bitmap不支持修改,那麼其內存自然也重用不了,代碼如下:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inMutable = true;//如果爲true, 那麼該bitmap緩存區可以被修改,否則不可被修改
    

我們看一下效果圖:

使用inBitmap之前:

使用inBitmap之後:

接下來的篇章中我們介紹下Glide的使用和原理。

Glide內部也使用了inBitmap作爲緩存複用的一種方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章