对于一个应用来说,有许多的数据是不需要实时访问网络的,或者在用户第二次打开应用的时候 ,访问网络可能不是特别的快 ,但是此时的应用是没有数据展示的,这时候就会涉及到 数据的缓存,数据的缓存 可以提高用户的体验 也可以 为用户节省不必要的流量。
缓存思路
-
如果你的数据更新的频率比较高,这时候要是缓存数据的话 ,那么 这时候的缓存数据 是有过期时间的,当然 还得看你怎么做缓存,如果 你是仅仅只是先访问网络之后 在替换缓存数据的话 ,这时候缓存就不会有什么过期的时间,这时候的缓存只是为了 在没有网络的情况下 ,用户也可以看到上一次的数据。
-
如果你的数据 更新的频率不是很高的话 ,这时候 你也可以设置缓存的过期时间,也可以不用设置,比如说 访问网络后直接替换掉上一次的缓存数据。
-
需要缓存的数据 有基本的数据 还有图片或者视频,今天只说 基本数据的缓存。
缓存方式
-
数据库
数据库一般缓存的是关系型比较强的数据,比如联系人等数据 -
文件
文件一般可以缓存任何你想缓存的数据 -
xml/sp(SharedPreferences)
这种方式主要缓存一些应用的配置信息
我们要说的方式
我在做缓存时一般采用的是 文件
效果展示
1. 有网的情况下:
2. 无网的情况下:
那么缓存到底应该怎么做呢? 下面 我就讲一下我自己做缓存的案例
缓存到底要缓存些什么呢?其实缓存要么缓存的是你从服务器拿到的json数据,要么缓存的是你解析json后得到的集合或者对象,也就是说,等你访问网络成功后,解析完json数据后,把你得到的集合或者对象用文件的形式存到本地。
比如:你从服务器拿到json数据后解析完之后得到的集合是ArrayList<SubjectInfo> mData = new ArrayList<>()
,SubjectInfo是一个对象,那么这时候 你要做的就是把 mData集合用文件的形式存到本地去, 怎么存呢?看代码
代码
1. 获取文件名
保存数据调用 CacheData.saveAllSubList(PrefHelperUtils.getInstance().getUserUid(), studentId, mData);这样就可以将mData用文件的形式写到本地
从本地获取数据调用 ListallSubList=CacheData.getAllSubList(PrefHelperUtils.getInstance().getUserUid(), studentId);
这样就可拿到保存到本地的集合;
说明:
PrefHelperUtils.getInstance().getUserUid()是用户的id,我是用sp保存到本地的;
需要注意的问题
如果有对象的话 那么这个对象必须实现Serializable接口,不然 不能成功!
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我们的公众号:
网友评论