Android 緩存淺談 (LruCache)

版权声明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_43821974/article/details/84989273

Android 可以通過緩存減少頻繁的網路操作,減少流量、提升性能。

三級緩存流程如下:

Created with Raphaël 2.2.0 加載圖片 判斷手機內存是否有該圖片? 有或無? 從內存中取出圖片 加載完成 判斷手機 SD 卡或外部儲存是否有該圖片? 有或無? 從手機 SD 卡或外部儲存中取出 網路下載該圖片 yes no yes no

三級緩存流程,首先從內存中加載該圖片,因為從內存獲取圖片速度最快,但是內存空間有限,所以從內存緩存使用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的方法,返回對象數量。

猜你喜欢

转载自blog.csdn.net/weixin_43821974/article/details/84989273
今日推荐