溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2、okhttp響應緩存

發(fā)布時間:2020-07-23 22:26:35 來源:網絡 閱讀:3744 作者:xiaofei_zhang 欄目:移動開發(fā)

1. okhttp框架擁有很好的緩存策略CacheStrategy,并使用DiskLruCache技術對響應的內容進行存儲。要建立緩存,要有以下條件:


  • 可以讀寫的緩存目錄

  • 緩存大小的限制

  • 緩存目錄應該是私有的,不信任的程序不能讀取緩存內容

  • 全局用戶唯一的緩存訪問實例。okhttp框架全局必須只有一個OkHttpClient實例(new OkHttpClient()),并在第一次創(chuàng)建實例的時候,配置好緩存。


2. okhttp框架獲取響應數(shù)據(jù)有三種方法:

/**
 * 返回網絡上的數(shù)據(jù)。如果沒有使用網絡,則返回null。
 */
public Response networkResponse()

/**
 * 返回緩存中的數(shù)據(jù)。如果不使用緩存,則返回null。對應發(fā)送的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") // 刷新數(shù)據(jù)
        .url("http://publicobject.com/helloworld.txt")
        .build();
  • 通過服務器驗證緩存數(shù)據(jù)是否有效

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();
  • 指定緩存數(shù)據(jù)過時的時間

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區(qū)別

max-age 指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。

max-stale 指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI