RxCache 整合 Android 的持久层框架 greenDAO、Room

一. 背景

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技术栈】

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181017G1QARC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励