Android中如何加载数据缓存
最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据
首先做一个保存缓存的工具类
importjava.io.File; importjava.io.IOException; importandroid.content.Context; importandroid.os.Environment; importandroid.util.Log; /** *缓存工具类 */ publicclassConfigCacheUtil{ privatestaticfinalStringTAG=ConfigCacheUtil.class.getName(); /**1秒超时时间*/ publicstaticfinalintCONFIG_CACHE_SHORT_TIMEOUT=1000*60*5;//5分钟 /**5分钟超时时间*/ publicstaticfinalintCONFIG_CACHE_MEDIUM_TIMEOUT=1000*3600*2;//2小时 /**中长缓存时间*/ publicstaticfinalintCONFIG_CACHE_ML_TIMEOUT=1000*60*60*24*1;//1天 /**最大缓存时间*/ publicstaticfinalintCONFIG_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分钟)缓存模式 */ publicenumConfigCacheModel{ CONFIG_CACHE_MODEL_SHORT,CONFIG_CACHE_MODEL_MEDIUM,CONFIG_CACHE_MODEL_ML,CONFIG_CACHE_MODEL_LONG; } /** *获取缓存 *@paramurl访问网络的URL *@return缓存数据 */ publicstaticStringgetUrlCache(Stringurl,ConfigCacheModelmodel,Contextcontext){ if(url==null){ returnnull; } Stringresult=null; Stringpath=Constant.ENVIROMENT_DIR_CACHE+MD5Utils.md5Encrypt(url)+".txt"; Filefile=newFile(path); if(file.exists()&&file.isFile()){ longexpiredTime=System.currentTimeMillis()-file.lastModified(); Log.d(TAG,file.getAbsolutePath()+"expiredTime:"+expiredTime/60000+"min"); //1。如果系统时间是不正确的 //2。当网络是无效的,你只能读缓存 if(UIUtils.isNetWorkConnected(context)){ if(expiredTime<0){ returnnull; } if(model==ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT){ if(expiredTime>CONFIG_CACHE_SHORT_TIMEOUT){ returnnull; } }elseif(model==ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM){ if(expiredTime>CONFIG_CACHE_MEDIUM_TIMEOUT){ returnnull; } }elseif(model==ConfigCacheModel.CONFIG_CACHE_MODEL_ML){ if(expiredTime>CONFIG_CACHE_ML_TIMEOUT){ returnnull; } }elseif(model==ConfigCacheModel.CONFIG_CACHE_MODEL_LONG){ if(expiredTime>CONFIG_CACHE_MEDIUM_TIMEOUT){ returnnull; } }else{ if(expiredTime>CONFIG_CACHE_MAX_TIMEOUT){ returnnull; } } } try{ result=FileUtils.readTextFile(file); }catch(IOExceptione){ e.printStackTrace(); } } returnresult; } /** *设置缓存 *@paramdata *@paramurl */ publicstaticvoidsetUrlCache(Stringdata,Stringurl){ if(Constant.ENVIROMENT_DIR_CACHE==null){ return; } Filedir=newFile(Constant.ENVIROMENT_DIR_CACHE); if(!dir.exists()&&Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){ dir.mkdirs(); } Filefile=newFile(Constant.ENVIROMENT_DIR_CACHE+MD5Utils.md5Encrypt(url)+".txt"); try{ //创建缓存数据到磁盘,就是创建文件 FileUtils.writeTextFile(file,data); }catch(IOExceptione){ Log.d(TAG,"write"+file.getAbsolutePath()+"datafailed!"); e.printStackTrace(); }catch(Exceptione){ e.printStackTrace(); } } /** *删除历史缓存文件 *@paramcacheFile */ publicstaticvoidclearCache(FilecacheFile){ if(cacheFile==null){ if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){ try{ FilecacheDir=newFile(Environment.getExternalStorageDirectory().getPath()+"/gdxz/cache/"); if(cacheDir.exists()){ clearCache(cacheDir); } }catch(Exceptione){ e.printStackTrace(); } } }elseif(cacheFile.isFile()){ cacheFile.delete(); }elseif(cacheFile.isDirectory()){ File[]childFiles=cacheFile.listFiles(); for(inti=0;i<childFiles.length;i++){ clearCache(childFiles[i]); } } } }
已经写好的一个工具,只需在需要做缓存的地方调用ConfigCacheUtil.getUrlCache方法传入相应的url,类型和上下文判断结果是否为空,如果为空说明不存在缓存请求网络加载数据。如果不为空说明缓存中有数据直接读缓存,得到result再处理json数据就ok了
以上内容是针对Android中如何加载数据缓存的方法,希望对大家有所帮助。