我將很快開展一個項目,該項目主要使用HTTPRequests
主要是JSON
s和Images
,所以我認爲考慮緩存是一個好主意。基本上,我正在尋找一個HttpResponseCache不清除舊文件?
-
解決
- 與給定終身啓動
HTTPRequest
(FE 3,6,12小時) - 檢查,如果該請求是在緩存中可用的並且仍有效(壽命)
- 如果申請仍然有效,把它從緩存,否則發出請求,並保存其響應
我發現HttpResponseCache
類的Android。它正在工作,但它是而不是像我期待的那樣工作。
我的測試用例是一個AsyncTask
緩存幾個圖像。代碼如下所示:
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Bitmap myBitmap;
try {
connection.addRequestProperty("Cache-Control","only-if-cached");
//check if Request is in cache
InputStream cached = connection.getInputStream();
//set image if in cache
myBitmap = BitmapFactory.decodeStream(cached);
} catch (FileNotFoundException e) {
HttpURLConnection connection2 = (HttpURLConnection) url.openConnection();
connection2.setDoInput(true);
connection2.addRequestProperty("Cache-Control", "max-stale=" + 60);
connection2.connect();
InputStream input = connection2.getInputStream();
myBitmap = BitmapFactory.decodeStream(input);
}
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
}
兩個問題:
- 我設置
max-stale=60seconds
用於測試目的。但是,如果我在5分鐘後調用相同的URL,它告訴我,它正在從緩存中加載圖像。 我會假設,由於緩存中的HTTPRequest已過期,圖像會被重新加載?或者我必須自己清理緩存嗎? - 在我的
catch
塊中,我必須創建第二個HttpURLConnection
,因爲在打開URLConnection(發生在connection.getInputStream()?!)中後,我無法添加屬性。這是不好的編程?
畢竟,我發現HttpResponseCache
記錄不當。我遇到了Volley: Fast Networking,但這似乎更少記錄,即使它提供了我需要的東西(請求排隊和優先級...)。 你對緩存有什麼用處?歡迎任何與圖書館,教程的鏈接。
UPDATE 我並未指定的Android版本低於4.0(仍可能intresting爲其他用戶?)