注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術(shù)一般,由于喜愛安卓而產(chǎn)生了翻譯的念頭,純屬個人興趣愛好。
原文鏈接: http://developer.android.com/training/efficient-downloads/redundant_redundant.html
最基本的減少你的下載數(shù)量的方法就是只下載你需要的數(shù)據(jù)。就數(shù)據(jù)而言,這就意味著實現(xiàn)REST APIs(譯者注:REST即Representational State Transfer,意為表述性轉(zhuǎn)移狀態(tài),在Web服務(wù)中,經(jīng)常能看到基于RESTful的設(shè)計風格),它可以允許你使用一些參數(shù)如:上一次更新的時間,來指定限制返回數(shù)據(jù)的查詢條件。
類似的,當下載圖片時,減少服務(wù)端的圖片尺寸,而不是在客戶端把完整圖片全下載下來再調(diào)整尺寸,也是一個好的習(xí)慣。
一). 在本地緩存文件
另一個重要的技術(shù)是避免下載重復(fù)數(shù)據(jù)。你可以使用緩存來實現(xiàn)。總是緩存靜態(tài)資源,如包括一些點播類的下載如完整尺寸的圖片(如果條件允許的話)。這類資源應(yīng)該獨立地存儲起來,來保證你能定期的清空你的資源緩存從而能夠控制它的大小。
要保證你的緩存不會導(dǎo)致你的應(yīng)用顯示的是陳舊的無用信息,應(yīng)該從HTTP響應(yīng)頭中,提取出這個請求內(nèi)容上一次更新的時間,以及它什么時候會過期。這可以讓你確定什么時候相關(guān)的內(nèi)容要被刷新。
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 }
使用這一方法,你可以有效地緩存動態(tài)數(shù)據(jù),而又不會導(dǎo)致你的應(yīng)用使用的數(shù)據(jù)是陳舊的。
另外,你可以將不敏感的數(shù)據(jù)緩存在不被管理的外部緩存目錄中:
Context.getExternalCacheDir();
另外,你也可以使用管理的/安全的應(yīng)用緩存。但是要注意當系統(tǒng)的存儲資源不夠時,這一內(nèi)部緩存會被自動清空。
Context.getCache();
當應(yīng)用被卸載時,不管文件存儲于哪一種類型的緩存,都會被清除。
二). 使用HttpURLConnection響應(yīng)緩存
Android 4.0在“ HttpURLConnection ”中添加了一個響應(yīng)緩存。你可以在支持的設(shè)備上使用JAVA反射(如下所示)來啟用HTTP響應(yīng)緩存: ?
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+的設(shè)備上啟用響應(yīng)緩存,而不會影響到早期版本的系統(tǒng)。
在使用了該緩存后,被完整緩存的的HTTP請求可以直接被本地存儲所響應(yīng),從而不需要再打開一個新的網(wǎng)絡(luò)連接。另外緩存可以定期通過向服務(wù)器詢問自己的實時性,這樣就可以避免了一部分由于下載數(shù)據(jù)導(dǎo)致的帶寬損耗。
沒有被緩存的響應(yīng)會被存儲于響應(yīng)緩存中以備將來可以用來響應(yīng)相關(guān)的請求。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
