Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中如何加載數據緩存

Android中如何加載數據緩存

編輯:關於Android編程

最近app快完工了,但是很多列表加載,新聞咨詢等數據一直從網絡請求,速度很慢,影響用戶體驗,所以尋思用緩存來加載一些更新要求不太高的數據

首先做一個保存緩存的工具類

import java.io.File; 
import java.io.IOException; 
import android.content.Context;
import android.os.Environment; 
import android.util.Log; 
/** 
* 緩存工具類 
*/ 
public class ConfigCacheUtil { 
private static final String TAG=ConfigCacheUtil.class.getName(); 
/** 1秒超時時間 */ 
public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 5; // 5 分鐘 
/** 5分鐘超時時間 */ 
public static final int CONFIG_CACHE_MEDIUM_TIMEOUT=1000 * 3600 * 2; // 2小時 
/** 中長緩存時間 */ 
public static final int CONFIG_CACHE_ML_TIMEOUT=1000 * 60 * 60 * 24 * 1; // 1天 
/** 最大緩存時間 */ 
public static final int CONFIG_CACHE_MAX_TIMEOUT=1000 * 60 * 60 * 24 * 7; // 7天 
/**
* CONFIG_CACHE_MODEL_LONG : 長時間(7天)緩存模式 <br> 
* CONFIG_CACHE_MODEL_ML : 中長時間(12小時)緩存模式<br> 
* CONFIG_CACHE_MODEL_MEDIUM: 中等時間(2小時)緩存模式 <br> 
* CONFIG_CACHE_MODEL_SHORT : 短時間(5分鐘)緩存模式 
*/ 
public enum ConfigCacheModel { 
CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG; 
} 
/** 
* 獲取緩存 
* @param url 訪問網絡的URL 
* @return 緩存數據 
*/ 
public static String getUrlCache(String url, ConfigCacheModel model,Context context) { 
if(url == null) { 
return null; 
} 
String result=null; 
String path=Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"; 
File file=new File(path); 
if(file.exists() && file.isFile()) { 
long expiredTime=System.currentTimeMillis() - file.lastModified(); 
Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime / 60000 + "min"); 
// 1。如果系統時間是不正確的 
// 2。當網絡是無效的,你只能讀緩存 
if(UIUtils.isNetWorkConnected(context)) { 
if(expiredTime < 0) { 
return null; 
} 
if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT) { 
if(expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) { 
return null; 
} 
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM) { 
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { 
return null; 
} 
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_ML) { 
if(expiredTime > CONFIG_CACHE_ML_TIMEOUT) { 
return null; 
} 
} else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_LONG) { 
if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { 
return null; 
} 
} else { 
if(expiredTime > CONFIG_CACHE_MAX_TIMEOUT) { 
return null; 
} 
} 
} 
try { 
result=FileUtils.readTextFile(file); 
} catch(IOException e) { 
e.printStackTrace(); 
} 
} 
return result; 
} 
/** 
* 設置緩存 
* @param data 
* @param url 
*/ 
public static void setUrlCache(String data, String url) { 
if(Constant.ENVIROMENT_DIR_CACHE == null) { 
return; 
} 
File dir=new File(Constant.ENVIROMENT_DIR_CACHE); 
if(!dir.exists() && Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
dir.mkdirs(); 
} 
File file=new File(Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"); 
try { 
// 創建緩存數據到磁盤,就是創建文件 
FileUtils.writeTextFile(file, data); 
} catch(IOException e) { 
Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!"); 
e.printStackTrace(); 
} catch(Exception e) { 
e.printStackTrace(); 
} 
} 
/** 
* 刪除歷史緩存文件 
* @param cacheFile 
*/ 
public static void clearCache(File cacheFile) { 
if(cacheFile == null) { 
if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { 
try { 
File cacheDir=new File(Environment.getExternalStorageDirectory().getPath() + "/gdxz/cache/"); 
if(cacheDir.exists()) { 
clearCache(cacheDir); 
} 
} catch(Exception e) { 
e.printStackTrace(); 
} 
} 
} else if(cacheFile.isFile()) { 
cacheFile.delete(); 
} else if(cacheFile.isDirectory()) { 
File[] childFiles=cacheFile.listFiles(); 
for(int i=0; i < childFiles.length; i++) { 
clearCache(childFiles[i]); 
} 
} 
} 
}

已經寫好的一個工具,只需在需要做緩存的地方調用ConfigCacheUtil.getUrlCache方法傳入相應的url,類型和上下文 判斷結果是否為空,如果為空說明不存在緩存請求網絡加載數據。如果不為空說明緩存中有數據直接讀緩存,得到result再處理json數據就ok了

以上內容是針對Android中如何加載數據緩存的方法,希望對大家有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved