1. 程式人生 > >安卓專案實戰之強大的網路請求框架okGo使用詳解(三):快取的使用

安卓專案實戰之強大的網路請求框架okGo使用詳解(三):快取的使用

相關實體類必須實現序列化介面

使用快取前,必須讓涉及到快取javaBean物件實現Serializable介面,否者會報NotSerializableException。因為快取的原理是將物件序列化後直接寫入資料庫中,如果不實現Serializable介面,會導致物件無法序列化,進而無法寫入到資料庫中,也就達不到快取的效果。

示例程式碼

在這裡插入圖片描述涉及到快取相關的api一共是如下五個:
1. cacheKey
每次框架是根據這個cacheKey去到資料庫中尋找快取的,所以一般來說,每個不同功能的請求都要設定不一樣的cacheKey,如果相同,會導致資料庫中的快取資料發生覆蓋或錯亂。如果不指定cacheKey,預設是用url帶引數的全路徑名為cacheKey。
2. cacheMode


目前預設提供了五種CacheMode快取模式,不同的模式會有不同的Callback回撥順序

NO_CACHE:不使用快取,該模式下cacheKey、cacheTime 引數均無效
DEFAULT:按照HTTP協議的預設快取規則,例如有304響應頭時快取。
REQUEST_FAILED_READ_CACHE:先請求網路,如果請求網路失敗,則讀取快取,如果讀取快取失敗,本次請求失敗。
IF_NONE_CACHE_REQUEST:如果快取不存在才請求網路,否則使用快取。
FIRST_CACHE_THEN_REQUEST:先使用快取,不管是否存在,仍然請求網路。

3. cacheTime


當前快取的有效時間是多長,單位毫秒,上面示例是3600秒,也就是一個小時,這個根據自己需要設定,如果不設定,預設是CacheEntity.CACHE_NEVER_EXPIRE=-1,也就是永不過期。該引數對DEFAULT模式是無效的,因為該模式是完全遵循標準的http協議的,快取時間是依靠服務端響應頭來控制,所以客戶端的cacheTime引數無效。

4. cachePolicy
這個是自定義的快取策略,內建的五大快取模式其實就是這個快取策略CachePolicy介面的五種不同實現,如果這五種模式不能滿足你,你完全可以自行實現這個介面,寫出屬於你自己的快取規則。

5. onCacheSuccess


當快取讀取成功後,回撥的是這個方法,如果你只複寫了onSuccess方法,是無法獲取快取的,這裡要注意。

快取的相關操作

我們知道快取是儲存在資料庫中的,那麼其實快取的操作也就是資料庫的操作,那麼操作這個資料庫中快取表的物件是這個CacheManager,它是個單例模式,裡面提供了很多方法,常用的方法如下:
獲取所有的快取,但是一般每個快取的資料型別都不一樣,所以快取的泛型使用 ?
在這裡插入圖片描述根據cacheKey獲取對應的快取,一共有以下幾種寫法:
在這裡插入圖片描述根據cacheKey刪除指定快取,返回值是否刪除成功
在這裡插入圖片描述清除所有快取,返回值是否刪除成功
在這裡插入圖片描述其他操作,自己檢視CacheManager中的方法
在這裡插入圖片描述

專案中使用快取

一般使用快取的時候,指定cacheKey和cacheMode就行了,但是遇到列表快取的時候,我們通常的做法是隻快取下拉重新整理的第一頁的資料,上拉載入獲得的資料不進行快取,程式碼示例如下:
在這裡插入圖片描述在這裡插入圖片描述