Android中如何加载数据缓存
程序员文章站
2024-02-19 09:44:52
最近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中如何加载数据缓存的方法,希望对大家有所帮助。
推荐阅读
-
Android中如何加载数据缓存
-
在php中,我将某数组以blob存入数据库,取出来后如何转换成数组?
-
Android中如何取消listview的点击效果
-
如何在 Java 中实现一个 redis 缓存服务
-
Android实现内存中数据保存到sdcard的方法
-
如何解决DB2数据迁移中的外键约束问题
-
浅谈MySQL 数据库中如何解决分组统计的问题_MySQL
-
php导出excel中,若数据库一列内容中存在换行,则在excel中对应换成多行,如何解决?
-
数据访问层(DAL)如何优雅的协调存取缓存数据库(如redis)和持久数据库(如mysql)?
-
[原创] 如何在android中实现shake的动作检测 - part 1 博客分类: Android AndroidHTML5咨询浏览器Flash