W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:kesenhoo - 原文:http://developer.android.com/training/efficient-downloads/redundant_redundant.html
減少下載的最基本方法是僅僅下載那些我們需要的。從數(shù)據(jù)的角度看,我們可以通過傳遞類似上次更新時間這樣的參數(shù)來制定查詢數(shù)據(jù)的條件。
同樣,在下載圖片的時候,server 那邊最好能夠減少圖片的大小,而不是讓我們下載完整大小的圖片。
另一個重要的技術(shù)是避免下載重復的數(shù)據(jù)。可以使用緩存機制來處理這個問題。緩存靜態(tài)的資源,包括按需下載例如完整的圖片(只要合理和興)。這些緩存的資源需要分開存放,使得我們可以定期地清理這些緩存,從而控制緩存數(shù)據(jù)的大小。
為了保證 app 不會因為緩存而導致顯示的是舊數(shù)據(jù),請在緩存中獲取數(shù)據(jù)的同時檢測其是否過期,當數(shù)據(jù)過期的時候,會提示進行刷新。
long currentTime = System.currentTimeMillis();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
long expires = conn.getHeaderFieldDate("Expires", currentTime);
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);
setDataExpirationDate(expires);
if (lastModified < lastUpdateTime) {
// Skip update
} else {
// Parse update
}
使用這種方法,可以有效保證緩存里面一直是最新的數(shù)據(jù)。
我們可以緩存非敏感數(shù)據(jù)到非受管的外部緩存目錄(目錄會是sdcard下面的Android/data/data/com.xxx.xxx/cache
):
Context.getExternalCacheDir();
或者,我們可以使用受管/安全的應用緩存。請注意,當系統(tǒng)的可用存儲空間較小時,存放在內(nèi)存中的數(shù)據(jù)有可能會被清除(類似:system/data/data/com.xxx.xxx./cache
)。
Context.getCache();
緩存在上面兩個地方的文件都會在 app 卸載的時候被清除。
Ps:請注意這點:發(fā)現(xiàn)很多應用總是隨便在 sdcard 下面創(chuàng)建一個目錄用來存放緩存,可是這些緩存又不會隨著程序的卸載而被刪除,這其實是不符合規(guī)范,程序都被卸載了,為何還要留那么多垃圾文件,而且這些文件有可能會泄漏一些隱私信息。除非你的程序是音樂下載,拍照程序等等,這些確定程序生成的文件是會被用戶需要留下的,不然都應該使用上面的那種方式來獲取 Cache 目錄。
在 Android 4.0
里面為 HttpURLConnection
增加了一個響應緩存(這是一個很好的減少 http 請求次數(shù)的機制,Android 官方推薦使用 HttpURLConnection 而不是 Apache 的 DefaultHttpClient,就是因為前者不僅僅有針對 android 做 http 請求的優(yōu)化,還在4.0上增加了 Reponse Cache,這進一步提高了效率)。我們可以使用反射機制開啟 HTTP response cache,看下面的例子:
private void enableHttpResponseCache() {
try {
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
File httpCacheDir = new File(getCacheDir(), "http");
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
} catch (Exception httpResponseCacheNotAvailable) {
Log.d(TAG, "HTTP response cache is unavailable.");
}
}
上面的示例代碼在 Android 4.0 以上的設備上會開啟 response cache,同時不會影響到之前的程序。
在cache被開啟之后,所有cache中的HTTP請求都可以直接在本地存儲中進行響應,并不需要開啟一個新的網(wǎng)絡連接。被cache起來的response可以被server所確保沒有過期,這樣就減少了下載所需的帶寬。
沒有被cached的response會為了方便下次請求而被存儲在response cache中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: