Skip to content

Latest commit

 

History

History
146 lines (120 loc) · 5.32 KB

File metadata and controls

146 lines (120 loc) · 5.32 KB

🎯 DataStore 缓存策略实现完成!

我已经为你完成了完整的基于 DataStore 的缓存策略实现,完全替代了 SharedPreferences。以下是具体的实现细节:

🔧 重要修复说明

类型转换错误修复

  • 修复了 LinkedHashTreeMap cannot be cast to Banner 错误
  • 使用类型安全的 JsonAdapter 替代通用适配器
  • 确保序列化/反序列化过程的类型安全性
  • 所有缓存操作现在都是完全类型安全的

📁 实现的核心组件

1. DataStoreCacheManager - DataStore 缓存管理器

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/cache/DataStoreCacheManager.kt
  • 🔧 功能:
    • 使用 DataStore Preferences 实现现代化缓存
    • 异步操作,不阻塞 UI 线程
    • 支持协程和 Flow 响应式编程
    • 事务性操作,保证数据一致性
    • 内置错误处理和重试机制

2. CacheStrategy - 缓存策略配置

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/cache/CacheStrategy.kt
  • 🔧 支持的策略:
    • NETWORK_ONLY - 仅从网络获取
    • CACHE_ONLY - 仅从缓存获取
    • CACHE_FIRST - 缓存优先(最常用)
    • NETWORK_FIRST - 网络优先,失败时用缓存
    • CACHE_AND_NETWORK - 先返回缓存,同时更新网络数据

3. BaseRepository - 基于 DataStore 的基础仓库

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/network/BaseRepository.kt
  • 🔧 核心功能:
    • safeApiCallWithCache() - 带 DataStore 缓存策略的安全API调用
    • 异步缓存管理,不阻塞主线程
    • 支持 Flow 响应式数据流
    • 多种缓存策略的自动切换
    • 类型安全的缓存操作

4. WanAndroidRepository - DataStore 数据仓库

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/data/repository/WanAndroidRepository.kt
  • 🔧 功能:
    • 为所有 WanAndroid API 提供 DataStore 缓存支持
    • 不同数据类型的差异化缓存时间配置
    • 异步缓存管理工具(清空、检查状态)
    • 便捷方法(仅缓存、强制刷新等)

🎨 UI 演示组件

5. DataStoreComparisonViewModel - DataStore 演示 ViewModel

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/ui/viewmodel/DataStoreComparisonViewModel.kt
  • 🔧 功能:
    • 演示 DataStore 缓存的各种功能
    • 实时缓存状态监控
    • 支持批量写入、并发测试
    • 缓存统计信息展示

6. DataStoreComparisonScreen - DataStore 演示界面

  • 📍 位置:/app/src/main/java/com/thisfeng/composestudykit/ui/screen/DataStoreComparisonScreen.kt
  • 🔧 界面功能:
    • 实时显示 DataStore 缓存状态
    • 写入/读取测试按钮
    • 批量操作和并发性能测试
    • DataStore 优势展示

🚀 DataStore 相比 SharedPreferences 的优势

性能优势

  • 异步操作:不阻塞 UI 线程,更流畅的用户体验
  • 更好的内存管理:优化的存储机制
  • 并发安全:支持多线程并发操作
  • 响应速度:协程优化的 I/O 操作

开发体验优势

  • 类型安全:基于 JsonAdapter 的编译时类型检查
  • 严格类型检查:完全序列化/反序列化类型安全
  • 协程原生支持:与现代 Android 开发无缝集成
  • Flow 支持:响应式编程
  • 错误处理:更好的异常处理机制

可靠性优势

  • 事务性操作:保证数据一致性
  • 自动重试:网络失败时的智能重试
  • 更好的测试支持:易于单元测试
  • 向前兼容:Google 推荐的现代存储方案

🎯 如何使用

DataStore 基本用法:

// 异步缓存数据
viewModelScope.launch {
    dataStoreCacheManager.cacheData("key", jsonData)
}

// 异步读取数据
viewModelScope.launch {
    val data = dataStoreCacheManager.getCachedData("key")
}

// Flow 响应式读取
dataStoreCacheManager.getCachedDataFlow("key")
    .collect { data ->
        // 响应式更新 UI
    }

与网络请求结合:

// DataStore 缓存优先策略
repository.getBanners(CacheStrategy.CACHE_FIRST)
    .collect { result ->
        when (result) {
            is CacheResult.FromCache -> // 来自 DataStore 缓存
            is CacheResult.FromNetwork -> // 来自网络并已缓存到 DataStore
            is CacheResult.Failed -> // 加载失败
            is CacheResult.Loading -> // 加载中
        }
    }

📱 应用演示

🎉 项目修复完成!类型安全问题已解决!

目前你的应用已经有 3个Tab页

  1. 真实API - 调用真实 WanAndroid 接口(使用 DataStore 缓存)✅ 已修复类型转换错误
  2. DataStore - 演示 DataStore 缓存功能和优势
  3. 模拟演示 - 模拟网络请求演示

你可以在 "真实API" Tab 中:

  • ✅ 正常调用 WanAndroid 真实 API
  • ✅ 体验 DataStore 缓存的所有功能
  • ✅ 查看数据来源(缓存/网络)
  • ✅ 测试各种缓存策略

你可以在 "DataStore" Tab 中:

  • 测试 DataStore 写入和读取
  • 进行批量数据操作
  • 测试并发性能
  • 查看缓存统计信息
  • 了解 DataStore 相比 SharedPreferences 的优势

这个 DataStore 缓存实现提供了现代化、生产级别的功能,完全符合 Google 推荐的最佳实践,可以直接用于实际项目中!🎉