当前位置: 移动技术网 > 移动技术>移动开发>Android > Android中如何加载数据缓存

Android中如何加载数据缓存

2019年07月24日  | 移动技术网移动技术  | 我要评论
最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 首先做一个保存缓存的工具类

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网