編輯:關於Android編程
采用緩存,可以進一步大大緩解數據交互的壓力,又能提供一定的離線浏覽。下邊簡略列舉一下緩存管理的適用環境:
1. 提供網絡服務的應用
2. 數據更新不需要實時更新,哪怕是3-5分鐘的延遲也是可以采用緩存機制。
3. 緩存的過期時間是可以接受的(類似網易的新聞閱讀,支持離線離線閱讀)
這樣所帶來的好處:
1. 減小服務器的壓力
2. 提高客戶端的響應速度(本地數據提取嘛)
3. 一定程度上支持離線浏覽(可以參考網易的那個新聞應用,個人感覺離線閱讀做得非常棒。)
一、緩存管理的方法
緩存管理的原理很簡:通過時間的設置來判斷是否讀取緩存還是重新下載;斷網下就沒什麼好說的,直接去緩存即可。
二、數據庫(SQLite)緩存方式
這種方法是在下載完數據文件後,把文件的相關信息如url,路經,下載時間,過期時間等存放到數據庫,當然我個人建議把url作為唯一的標識。下次下載的時候根據url先從數據庫中查詢,如果查詢到當前時間並未過期,就根據路徑讀取本地文件,從而實現緩存的效果。
從實現上我們可以看到這種方法可以靈活存放文件的屬性,進而提供了很大的擴展性,可以為其它的功能提供一定的支持。
從操作上需要創建數據庫,每次查詢數據庫,如果過期還需要更新數據庫,清理緩存的時候還需要刪除數據庫數據,稍顯麻煩,而數據庫操作不當又容易出現一系列的性能,ANR問題,指針錯誤問題,實現的時候要謹慎,具體作的話,但也只是增加一個工具類或方法的事情。
還有一個問題,緩存的數據庫是存放在/data/data/
三、文件緩存方式
這種方法,使用File.lastModified()方法得到文件的最後修改時間,與當前時間判斷是否過期,從而實現緩存效果。
實現上只能使用這一個屬性,沒有為其它的功能提供技術支持的可能。操作上倒是簡單,比較時間即可,而且取的數據也就是文件裡的JSON數據而已。本身處理也不容易帶來其它問題,代價低廉。
四、文件法緩存方式的兩點說明
1. 不同類型的文件的緩存時間不一樣。
籠統的說,不變文件的緩存時間是永久,變化文件的緩存時間是最大忍受不變時間。說白點,圖片文件內容是不變的,一般存在SD卡上直到被清理,我們是可以永遠讀取緩存的。配置文件內容是可能更新的,需要設置一個可接受的緩存時間。
2. 不同環境下的緩存時間標准不一樣。
無網絡環境下,我們只能讀取緩存文件,為了應用有東西顯示,沒有什麼過期之說了。
WiFi網絡環境下,緩存時間可以設置短一點,一是網速較快,而是流量不要錢。
3G流量環境下,緩存時間可以設置長一點,節省流量,就是節省金錢,而且用戶體驗也更好。
GPS就別說更新什麼的,已經夠慢的了。緩存時間能多長就多長把。
當然,作為一款好的應用,不會死定一種情況,針對於不同網絡變換不同形式的緩存功能是必須有的。而且這個時間根據自己的實際情況來設置:數據的更新頻率,數據的重要性等。
五、何時刷新
開發者一方面希望盡量讀取緩存,用戶一方面希望實時刷新,但是響應速度越快越好,流量消耗越少越好(關於這塊,的確開發中我沒怎麼想到,畢竟接口就是這麼多,現在公司的產品幾乎點一下就訪問一下,而且還有些雞肋多余的功能。慢慢修改哈哈),是一個矛盾。
其實何時刷新我也不知道,這裡我提供兩點建議:
1. 數據的最長多長時間不變,對應用無大的影響。
比如,你的數據更新時間為4小時,則緩存時間設置為1~2小時比較合適。也就是更新時間/緩存時間=2,但用戶個人修改、網站編輯人員等一些人為的更新就另說。一天用戶總會看到更新,即便有延遲也好,視你產品的用途了;如果你覺得你是資訊類應用,再減少,2~4小時,如果你覺得數據比較重要或者比較受歡迎,用戶會經常把玩,再減少,1~2小時,依次類推。
2. 提供刷新按鈕。
必要時候或最保險的方法使在相關界面提供一個刷新按鈕,或者當下流行的下拉列表刷新方式。為緩存,為加載失敗提供一次重新來過的機會。
從實現上我們全面考慮了幾個細節,注釋已經說明,不再贅述。
void getConfig(){ //首先嘗試讀取緩存 String cacheConfigString = ConfigCache.getUrlCache(CONFIG_URL); //根據結果判定是讀取緩存,還是重新讀取 if (cacheConfigString != null) { showConfig(cacheConfigString); } else { //如果緩存結果是空,說明需要重新加載 //緩存為空的原因可能是1.無緩存;2. 緩存過期;3.讀取緩存出錯 AsyncHttpClient client = new AsyncHttpClient(); client.get(CONFIG_URL, new AsyncHttpResponseHandler(){ @Override public void onSuccess(String result){ //成功下載,則保存到本地作為後面緩存文件 ConfigCache.setUrlCache(result, CONFIG_URL); //後面可以是UI更新,僅供參考 showConfig(result); } @Override public void onFailure(Throwable arg0) { //根據失敗原因,考慮是顯示加載失敗,還是再讀取緩存 } }); } }
本人工作有一個月多了。對於android很多東西,都有了新的了解或者說真正的掌握。為了讓更多的像我這樣的小白少走彎路,所以我會堅持將我在工作中遇到的一些比較令我印象深刻的
使用意圖篩選器 點擊下載源碼 1、創建一個Intents項目,給該項目添加一個新類,命名為MyBrowserActivity,在res/layout文件夾下
前言在H5火熱的時代,許多框架都出了底部彈窗的控件,在H5被稱為彈出菜單ActionSheet,今天我們也來模仿一個ios的底部彈窗,取材於蘋果QQ的選擇頭像功能。正文廢
AutoCompleteTextView是實現動態匹配輸入內容的一種輸入框(EditText),如輸入“and”時,會提示“Android”效果圖:實現代碼:packag