程序开发的缓存大概有哪些:
1.服务端控制缓存
如volley请求库,便是通过服务端的“Cache-Control”和“max-age”来告诉客户端有没有缓存以及缓存的时间,也是推荐的使用方式,但是需要服务端配合,比较灵活。
2.客户端直接控制缓存
有些时候不需要服务端来支持的话,客户端可以直接做一层缓存,思路就是请求之后把数据缓存在本地,最常见的是直接以文件缓存在本地就好了,当然你可以缓存在本地的sqlite,以sqlite文件的形式缓存数据处理更灵活点,然后客户端自己处理缓存的时间,过期则直接清除数据。对于一些不太经常变化的页面,采用这种缓存可以减少客户端流量,同时减少服务器并发量。
对于一些新闻类或者timeline这种,数据变化是非常频繁的,针对这种情况可能就不太适合设置缓存时间,这种情况可以考虑让页面每次进来都会自动刷新一次以获取最新数据,如果网络不好或者断开时可以直接读取本地缓存,增加用户体验。当然如果想要更复杂的处理可以配合时间来判断当前页面要不要刷新。
在上一篇中我们已经大概介绍了如何使用sp以及缓存框架ACache,补充几点,sp的跨进程,虽然谷歌提倡我们使用Content Provider,但既然sp有这种功能我们还是要写下。
被调用的应用A里面的
getSharedPreferences(“xx”, Context.MODE_WORLD_READABLE),参数二必须声明成Context.MODE_WORLD_READABLE或Context.MODE_WORLD_WRITEABLE权限这是前提。然后在B应用里面使用代码如下
// 方法中的局部变量必须声明成null,才能被调用
Context createPackageContext = null;
try {
//参数一为被调用应用的包名,二为忽略安全检查标志
createPackageContext = createPackageContext("com.example.ex00", Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
SharedPreferences sharedPreferences = createPackageContext.getSharedPreferences("spKJC", Context.MODE_PRIVATE);
String string = sharedPreferences.getString("spKJC", "没有为该值");
如果不通过创建Context访问其他应用的preference,可以以读取xml文件方式直接访问其他应用preference对应的xml文件,如:
File xmlFile = new File(“/data/data/应用包名/shared_prefs/文件名.xml”);
接下来补充缓存框架ACache
ACache类的构造方法为private的,所以只能通过get方式获取实例。默认情况下调运ACache.get(Context);方法得到的缓存文件放置在/data/data/app-package-name/cache/路径下,缓存的目录默认为ACache,缓存大小和数量均由ACache中的final变量控制。
文件里面的内容直接是数据没有格式
ACache的github地址
源码解析可以参考ASimpleCache开源库使用分析
好了有关缓存介绍完毕