当前位置: 首页 > news >正文

android sharepreference 的替代品

在 Android 开发中,SharedPreferences 因简单易用被广泛用于轻量数据存储,但存在线程不安全、异步操作繁琐、不支持复杂数据结构等局限。以下是常见的替代品,按适用场景分类说明:

一、轻量级键值存储(替代基础功能)

1. DataStore(官方推荐)
  • 类型:Google Jetpack 组件,分两种实现
    • Preferences DataStore:存储键值对(类似 SharedPreferences,但 API 更现代)。
    • Proto DataStore:基于 Protocol Buffers 存储结构化数据(类型安全,支持复杂结构)。
  • 优势
    • 完全异步(基于协程和 Flow),避免 SharedPreferences 的 apply()/commit() 潜在 ANR 风险。
    • 线程安全,无需手动处理同步问题。
    • 支持数据观察(Flow 监听变化),适合响应式 UI。
  • 缺点:API 相对较新,需熟悉协程;Preferences DataStore 仍不支持类型安全(Proto DataStore 支持)。
  • 适用场景:替代 SharedPreferences 的绝大多数场景,尤其是需要异步 / 响应式处理的场景。
  • 示例(Preferences DataStore)

    kotlin

    // 定义
    val dataStore: DataStore<Preferences> = context.createDataStore(name = "settings")
    // 存储
    suspend fun saveUser(name: String) {dataStore.edit { settings ->settings[stringPreferencesKey("user_name")] = name}
    }
    // 读取(Flow 监听)
    val userNameFlow: Flow<String?> = dataStore.data.map { it[stringPreferencesKey("user_name")] }
    
2. MMKV(腾讯开源)
  • 特点:基于 mmap 内存映射的高性能键值存储,支持多进程。
  • 优势
    • 读写速度远超 SharedPreferences(内存映射避免频繁 IO)。
    • 支持更多数据类型(布尔、int、long、float、double、String、字节数组等)。
    • 自动加密(可选),线程安全,API 简单(类似 SharedPreferences)。
  • 缺点:非官方组件,依赖第三方库;复杂结构需手动序列化(如 JSON)。
  • 适用场景:对性能要求高、需要多进程访问、存储简单数据的场景(如配置、缓存)。
  • 示例

    kotlin

    // 初始化
    MMKV.initialize(context)
    val mmkv = MMKV.defaultMMKV()
    // 存储
    mmkv.encode("user_name", "张三")
    // 读取
    val name = mmkv.decodeString("user_name")
http://www.dtcms.com/a/601078.html

相关文章:

  • 网站流量分成营销型网站5要素
  • 科技向暖,银发无忧:十五五规划中智慧养老的温度革命
  • UE5 的 Waterline Pro 6的浮力作用机制解析
  • Selenium WebDriver的工作原理?
  • UE5 C++ 定时器 案例练习
  • 6 个成熟的 JS 开源视频编辑项目
  • 网站建设管理维护责任书格式怎样在网站做链接
  • Flutter---Stream
  • 佛山企业网站建设机构南明区住房和城乡建设局网站上
  • 仓颉三方库开发实战:Simple HTTP Server 实现详解
  • 做360网站官网还是百度济南有做五合一网站公司
  • 详细解读视频生成模型Wan2.1代码
  • Cortex-M3-STM32F1 开发:(二十二)HAL 库开发 ➤ STM32 中断逻辑优先级计算
  • THC63LVD1027D一款10位双链路LVDS信号中继器芯片,支持WUXGA分辨率视频数据传输THC63LVD1027支持30位数据通道方案
  • 考研规划手册
  • MongoDB中 client_connection和database和collection之间的关系
  • 建筑网站建设赏析外贸公司用什么建网站
  • [智能体设计模式] 第4章:反思(Reflection)
  • 系统架构设计师与考研408在IT基础设施能力考核上的全面对比研究
  • 饮用水品牌营销型网站手机网站主页
  • 亿网中国网站管理系统绍兴网站网站建设
  • 基于web宿舍管理系统的设计与实现
  • 利用idea创建springboot多模块项目
  • C++仿muduo库高并发服务器项目:Poller模块
  • QT C++ QWebEngine与Web JS之间通信
  • 华为防火墙web配置SSL-在外人员访问内网资源
  • 本地部署事务管理软件 JIRA 并实现外网访问(Windows 版本)
  • 18、Linux常用命令-磁盘分区相关命令
  • nvm与node.js的安装指南
  • python+django/flask+vue的书城图书阅读器系统,亮点含目录章节pycharm