1. 程式人生 > >Android 快取淺談 (LruCache)

Android 快取淺談 (LruCache)

Android 可以通過快取減少頻繁的網路操作,減少流量、提升效能。

三級快取流程如下:

三級快取流程,首先從記憶體中載入該圖片,因為從記憶體獲取圖片速度最快,但是記憶體空間有限,所以從記憶體快取使用LruCache,外部快取即為硬碟快取,相比記憶體快取的速度慢很多,但可儲存空間大,硬碟快取使用DiskLruCache

Android 快取機制主要是基於 JAVA 的快取機制,JAVA 快取機制有四種,強引用、軟引用、弱引用、虛引用,
著重看軟引用和弱引用。
可參考:強引用、軟引用、弱引用、虛引用

Andorid 2.3版本後,Google 不建議使用軟引用與弱引用!,而是使用強引用

Google 官網描述如下:

	Note: 在過去,一種比較流行的記憶體快取實現方法是使用軟引用(SoftReference)或弱引用(WeakReference)對Bitmap進行快取,
	然而我們並不推薦這樣的做法。從Android 2.3 (API Level 9)開始,垃圾回收機制變得更加頻繁,這使得釋放軟(弱)引用的頻率也隨之增高,
	導致使用引用的效率降低很多。而且在Android 3.0 (API Level 11)之前,備份的Bitmap會存放在Native Memory中,
	它不是以可預知的方式被釋放的,這樣可能導致程式超出它的記憶體限製而崩潰。
	
	記憶體快取以花費寶貴的程式記憶體為前提來快速訪問點陣圖。 LruCache類(在API Level 4的Support Library中也可以找到)特別適合用來快取Bitmaps,
	它使用一個強引用(strong referenced)的LinkedHashMap儲存最近引用的物件,
	並且在快取超出設定大小的時候剔除(evict)最近最少使用到的物件。

一、LurCache介紹

  1. LRU (全稱:Least Recently Used)
    即最少使用演算法, 將最近沒有使用的資料從快取中移除。(全稱:Least Recently Used),即最少使用演算法, 將最近沒有使用的資料從快取中移除。
  2. LurCache
    演算法原理把最近使用的物件用強引用儲存在 LinkedHashMap,並且把最近最少使用的物件在快取大小達到閥值將它從記憶體中移除。

二、使用

實現 LurCache 快取的步驟:

  1. 先設定快取的記憶體大小,預設為手機記憶體的 1/8 。
    手機記憶體獲取方式:
     int maxMemonry =
    (int) (Runtime.getRuntime() .maxMemory() / 1024)
  2. 重寫 sizeOf的方法,返回物件數量。