Android 的二級快取如斯簡單

blankj發表於2018-07-05

CacheDiskUtils

之前寫過一篇 你想要的 CacheUtils,簡單介紹了下其可以完美替代 ASimpleCache,而且修復了其中少許 BUG 並做了相應優化,相關 API 如下所示:

快取相關 -> CacheUtils.java

getInstance             : 獲取快取例項
Instance.put            : 快取中寫入資料
Instance.getBytes       : 快取中讀取位元組陣列
Instance.getString      : 快取中讀取 String
Instance.getJSONObject  : 快取中讀取 JSONObject
Instance.getJSONArray   : 快取中讀取 JSONArray
Instance.getBitmap      : 快取中讀取 Bitmap
Instance.getDrawable    : 快取中讀取 Drawable
Instance.getParcelable  : 快取中讀取 Parcelable
Instance.getSerializable: 快取中讀取 Serializable
Instance.getCacheSize   : 獲取快取大小
Instance.getCacheCount  : 獲取快取個數
Instance.remove         : 根據鍵值移除快取
Instance.clear          : 清除所有快取
複製程式碼

其也就是所謂的硬碟快取,在 AndroidUtilCode 1.17.0 版本,該 CacheUtils 已被我標記廢棄,可替換為 CacheDiskUtils,下一個大版本1.18.x 可能就會移除 CacheUtils

CacheMemoryUtils

講了磁碟快取另一個就是記憶體快取,記憶體快取工具類 CacheMemoryUtils 原理是利用 LruCache 來實現的(LRU 是Least Recently Used的縮寫,即最近最少使用),其 API 如下所示:

記憶體快取相關 -> CacheMemoryUtils.java -> Test

getInstance           : 獲取快取例項
Instance.put          : 快取中寫入資料
Instance.get          : 快取中讀取位元組陣列
Instance.getCacheCount: 獲取快取個數
Instance.remove       : 根據鍵值移除快取
Instance.clear        : 清除所有快取
複製程式碼

CacheDoubleUtils

結合硬碟快取工具類 CacheDiskUtils 和記憶體快取工具類 CacheMemoryUtils,那麼我們的二級快取工具類 CacheDoubleUtils 便誕生了,其 API 如下所示:

二級快取相關 -> CacheDoubleUtils.java -> Test

getInstance                 : 獲取快取例項
Instance.put                : 快取中寫入資料
Instance.getBytes           : 快取中讀取位元組陣列
Instance.getString          : 快取中讀取 String
Instance.getJSONObject      : 快取中讀取 JSONObject
Instance.getJSONArray       : 快取中讀取 JSONArray
Instance.getBitmap          : 快取中讀取 Bitmap
Instance.getDrawable        : 快取中讀取 Drawable
Instance.getParcelable      : 快取中讀取 Parcelable
Instance.getSerializable    : 快取中讀取 Serializable
Instance.getCacheDiskSize   : 獲取磁碟快取大小
Instance.getCacheDiskCount  : 獲取磁碟快取個數
Instance.getCacheMemoryCount: 獲取記憶體快取個數
Instance.remove             : 根據鍵值移除快取
Instance.clear              : 清除所有快取
複製程式碼

藉助以上三個快取工具類,那麼 Android 端的快取實現便再也不是什麼難題了,例如你想要實現 RxCache,那麼藉助 RxJava 的 compose 操作符和我的工具類,把資料放入快取不就輕而易舉地實現了麼,更多風騷的姿勢可待你解鎖。

文章比較簡短精細,但實現的程式碼是比較漫長粗壯的,要閱讀原始碼和單測可以 fork 我的 AndroidUtilCode 來檢視,相信你會懂得我為這個工具類的付出。

相關文章