您好,登錄后才能下訂單哦!
1. okhttp框架擁有很好的緩存策略CacheStrategy,并使用DiskLruCache技術對響應的內容進行存儲。要建立緩存,要有以下條件:
可以讀寫的緩存目錄
緩存大小的限制
緩存目錄應該是私有的,不信任的程序不能讀取緩存內容
全局用戶唯一的緩存訪問實例。okhttp框架全局必須只有一個OkHttpClient實例(new OkHttpClient()),并在第一次創建實例的時候,配置好緩存。
2. okhttp框架獲取響應數據有三種方法:
/** * 返回網絡上的數據。如果沒有使用網絡,則返回null。 */ public Response networkResponse() /** * 返回緩存中的數據。如果不使用緩存,則返回null。對應發送的GET請求,緩存響應和網絡響應 * 有可都非空。 */ public Response cacheResponse() public Response priorResponse()
3. 代碼
設置緩存目錄
OkHttpClient client = new OkHttpClient(); int cacheSize = 10 * 1024 * 1024; // 10 MiB File cacheDirectory = new File("cache"); if (!cacheDirectory.exists()) { cacheDirectory.mkdirs(); } Cache cache = new Cache(cacheDirectory, cacheSize); client.setCache(cache);
強制使用網絡響應
Request request = new Request.Builder() .header("Cache-Control", "no-cache") // 刷新數據 .url("http://publicobject.com/helloworld.txt") .build();
通過服務器驗證緩存數據是否有效
Request request = new Request.Builder() .header("Cache-Control", "max-age=0") .url("http://publicobject.com/helloworld.txt") .build();
強制使用緩存響應
Request request = new Request.Builder() .header("Cache-Control", "only-if-cached") .url("http://publicobject.com/helloworld.txt") .build();
指定緩存數據過時的時間
int maxStale = 60 * 60 * 24 * 28; //4周 Request request = new Request.Builder() .header("Cache-Control", "max-stale=" + maxStale) .url("http://publicobject.com/helloworld.txt") .build();
注:HTTP header中的max-age 和max-stale區別
max-age 指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。
max-stale 指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。