天天看點

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

相關實體類必須實作序列化接口

使用緩存前,必須讓涉及到緩存javaBean對象實作Serializable接口,否者會報NotSerializableException。因為緩存的原理是将對象序列化後直接寫入資料庫中,如果不實作Serializable接口,會導緻對象無法序列化,進而無法寫入到資料庫中,也就達不到緩存的效果。

示例代碼

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

涉及到緩存相關的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,它是個單例模式,裡面提供了很多方法,常用的方法如下:

擷取所有的緩存,但是一般每個緩存的資料類型都不一樣,是以緩存的泛型使用 ?

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

根據cacheKey擷取對應的緩存,一共有以下幾種寫法:

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

根據cacheKey删除指定緩存,傳回值是否删除成功

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

清除所有緩存,傳回值是否删除成功

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

其他操作,自己檢視CacheManager中的方法

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用

項目中使用緩存

一般使用緩存的時候,指定cacheKey和cacheMode就行了,但是遇到清單緩存的時候,我們通常的做法是隻緩存下拉重新整理的第一頁的資料,上拉加載獲得的資料不進行緩存,代碼示例如下:

安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用
安卓項目實戰之強大的網絡請求架構okGo使用詳解(三):緩存的使用