mcpField
A
android-data-layer

android-data-layer

github.com/new-silvermoon开发992511 次安装13 周前更新
代码仓库

关于 android-data-layer

介绍基于 Repository 的 Android 离线优先数据层架构,指导开发者结合 Room 本地存储与 Retrofit 数据,并通过后台任务协调同步。

主要功能

  1. 01Repository 作为单一数据源
  2. 02Room 持久化与可观察 Flow
  3. 03使用 Retrofit 获取网络数据
  4. 04读取时先用缓存再刷新
  5. 05通过 WorkManager 执行 Outbox 同步
  6. 06使用 Hilt 绑定 Repository

适用场景

  1. 01设计离线优先数据层
  2. 02刷新期间提供缓存数据
  3. 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