一. 背景
RxCache(https://github.com/fengzhizi715/RxCache) 是一个支持 Java 和 Android 的 Local Cache 。
之前的文章
给 Java 和 Android 构建一个简单的响应式Local Cache
曾详细介绍过它。
RxCache 包含了两级缓存: Memory 和 Persistence 。
下图是 rxcache-core 模块的 uml 类图
二. 持久层
RxCache 的持久层包括 Disk、DB,分别单独抽象了 Disk、DB 接口并继承 Persistence。
DB 接口:
在 RxCache 的持久层,尝试集成 Android 常用的持久层框架。
2.1 集成 greenDAO
greenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库。
首先,创建一个缓存实体 CacheEntity ,它包含 id、key、data、timestamp、expireTime。其中 data 是待缓存的对象并转换成 json 字符串。
`
创建一个单例的 DBService ,并提供返回 CacheEntityDao 的方法。其实,crud 的逻辑也可以放在此处。
创建 GreenDAOImpl 实现 DB 接口,实现真正的缓存逻辑。
2.2 集成 Room
Room 是 Google 开发的一个 SQLite 对象映射库。 使用它来避免样板代码并轻松地将 SQLite 数据转换为 Java 对象。 Room 提供 SQLite 语句的编译时检查,可以返回 RxJava 和 LiveData Observable。
同样,需要先创建一个 CacheEntity,但是不能共用之前的 CacheEntity。因为 Room、greenDAO 使用的 不同。
创建一个 CacheEntityDao 用于 crud 的实现。
创建一个 AppDatabase 表示一个数据库的持有者。
最后,创建 RoomImpl 实现 DB 接口,实现真正的缓存逻辑。
这两种集成方式,都使用 CacheEntity 的 data 来存储对象转换后的 json 字符串。使用这种方式,可以替换成任何的持久层框架。使得 DB 也可以成为 RxCache 的其中一级缓存。
三. 使用
编写单元测试,看一下集成 greenDAO 的效果。
分别测试多种对象的存储、带 ExpireTime 的存储。
两个 test case 都顺利通过,表示集成 greenDAO 没有问题。当然,集成 Room 也是一样。
四. 总结
我单独创建了一个项目 RxCache4a 用于整合的 greenDAO、Room 等。
Github 地址: https://github.com/fengzhizi715/RxCache4a
未来,可能对框架增加一些 Annotation,以及增加 Cache 清除的算法。
关注【Java与Android技术栈】
领取专属 10元无门槛券
私享最新 技术干货