关于 android-data-layer
介绍基于 Repository 的 Android 离线优先数据层架构,指导开发者结合 Room 本地存储与 Retrofit 数据,并通过后台任务协调同步。
主要功能
- 01Repository 作为单一数据源
- 02Room 持久化与可观察 Flow
- 03使用 Retrofit 获取网络数据
- 04读取时先用缓存再刷新
- 05通过 WorkManager 执行 Outbox 同步
- 06使用 Hilt 绑定 Repository
适用场景
- 01设计离线优先数据层
- 02刷新期间提供缓存数据
- 03排队同步本地更改
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ new-silvermoon/ awesome-android-agent-skills --skill android-data-layer安装后在 Claude Code 中输入/android-data-layer确认已加载。
详细介绍
Android 数据层与离线优先
说明
数据层负责协调来自多个来源的数据。
1. 仓储模式
- 作用:单一事实来源(SSOT)。
- 逻辑:仓储决定是返回缓存数据,还是获取最新数据。
- 实现:
class NewsRepository @Inject constructor( private val newsDao: NewsDao, private val newsApi: NewsApi ) { // 将本地数据库中的数据作为事实来源公开 val newsStream: Flow<List<News>> = newsDao.getAllNews() // 同步操作 suspend fun refreshNews() { val remoteNews = newsApi.fetchLatest() newsDao.insertAll(remoteNews) } }
2. 本地持久化(Room)
- 用途:主要缓存和离线存储。
- 实体:定义
@Entity数据类。 - DAO:返回
Flow<T>以提供可观察的数据。
3. 远程数据(Retrofit)
- 用途:从后端获取数据。
- 响应:在接口中使用
suspend函数。 - 错误处理:使用
try-catch块或Result包装器封装网络调用,以妥善处理异常(无网络、404 等)。
4. 同步
- 读取:“过期后重新验证”(Stale-While-Revalidate)。立即显示本地数据,并触发后台刷新。
- 写入:“发件箱模式”(高级)。立即保存本地更改,标记为“未同步”,并使用
WorkManager将更改推送到服务器。
5. 依赖注入
- 在 Hilt 模块中将仓储接口绑定到实现。
@Binds abstract fun bindNewsRepository(impl: OfflineFirstNewsRepository): NewsRepository
评论
支持 Markdown