文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中如何加载数据缓存

2022-06-06 09:00

关注

最近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(); 
 
public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 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天 
 
public enum ConfigCacheModel { 
CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG; 
} 
 
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; 
} 
 
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(); 
} 
} 
 
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实现滑动加载数据的方法Android实现ListView分页自动加载数据的方法Android中ListView如何分页加载数据Android实现ListView数据动态加载的方法解决Android ListView数据为空及加载错误的方法Android应用中ListView利用OnScrollListener分页加载数据Android异步加载数据和图片的保存思路详解Android自定义加载控件实现数据加载动画


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯