版权声明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_43821974/article/details/84989273
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介紹
- LRU (全稱:Least Recently Used)
即最少使用算法, 將最近沒有使用的數據從緩存中移除。(全稱:Least Recently Used),即最少使用算法, 將最近沒有使用的數據從緩存中移除。 - LurCache
算法原理把最近使用的對象用強引用存儲在LinkedHashMap
,並且把最近最少使用的對象在緩存大小達到閥值將它從內存中移除。
二、使用
實現 LurCache 緩存的步驟:
- 先設置緩存的內存大小,預設為手機內存的 1/8 。
手機內存獲取方式:int maxMemonry = (int) (Runtime.getRuntime() .maxMemory() / 1024);
- 重寫
sizeOf
的方法,返回對象數量。