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中如何加载数据缓存的方法,希望对大家有所帮助。

以上是 Android中如何加载数据缓存 的全部内容, 来源链接: utcz.com/z/358950.html

回到顶部