編輯:關於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平台下如何調用系統方法發送短信、接收短信、系統的短信庫相關的問題。進入正題,我們先使用Eclipse工具模擬給自
Fresco,frescoandroid1、簡介 Fresco是Facebook最新推出的一款用於Android應用中展示圖片的強大圖片庫,可以從網絡、本地存儲和本地資源
安卓開發學習經歷2--《第一行代碼》coolweather項目SQL語句同一個“陷阱”掉兩次 注意轉義字符等特殊字符正確書寫 關於Id字段自增加體會,coolweath
Android源碼解析--SwipeMenuListView仿QQ聊天左滑 緒論: 好久沒寫博客了,最近比較懶,不想寫博客,但是在看書,看一些Android進階的書,