FastSharedPreferences

Introduction: :rocket:一个 Android 平台的高性能 key-value 组件,读写性能远超 SharedPreferences
More: Author   ReportBugs   
Tags:

FastSharedPreferences 是一个 Android 平台的高性能 key-value 组件。

FastSharedPreferences 特点

  1. 实现了 SharedPreferences 和 SharedPreferences.Editor 接口,便于无缝替换 SharedPreferences。
  2. 增强了 SharedPreferences,增加了写入/读取 Serializable 的接口。
  3. 高效的写入/读取性能,读写性能相比 SharedPreferences 增强了 200-300 倍
  4. 纯 java 实现,很好的兼容性和稳定性
  5. 实现代码简洁,aar 体积很小
  6. 支持跨进程使用(同时实现高性能和跨进程的难度超出预期,这一点后面会逐渐优化)
  7. 支持基于 LRU 的缓存管理,减少内存使用

FastSharedPreferences 原理

  • 适合高强度/高频次写入读取

    FastSharedPreferences 由 Cache 层和同步层构成,特别适合高强度/高频次写入读取数据。

  • 内存 Cache

    基于 ConcurrentHashMap 的内存 Cache 层,不仅提高了写入性能,也极大的提高了读取性能。

  • 同步管理

    通过脏数据标记等技术,减少了同步的次数,使得慢速的 I/O 不再成为读写速度的瓶颈。

fsp_principle

FastSharedPreferences 使用指南

接入

dependencies {
    compile 'com.jeremyliao:fast-sharedpreferences:0.0.1'
}

快速上手

在 application onCreate 中初始化:
FastSharedPreferences.init(context);
用法和 SharedPreferences 几乎完全一致,例如:
  • [x] 写入一个整数
FastSharedPreferences sharedPreferences = FastSharedPreferences.get(FSP_ID);
sharedPreferences.edit().putInt("test_key", 100).apply();
  • [x] 读取一个整数
FastSharedPreferences sharedPreferences = FastSharedPreferences.get(FSP_ID);
        int ret = sharedPreferences.getInt("test_key", -1);

性能对比

我们将 FastSharedPreferences 同 SharedPreferences、SQLite 以及腾讯的 MMKV 进行对比,测试的结果是对每项测试重复 200 次取平均值(对 SharedPreferences 和 SQLite 没有重复这么多次,因为时间太长了:))。相关测试代码参见benchmark

  • 写入 1000 个整数

benchmark_write_int

(测试机器是 Nexus 6 64G,Android 7.1.1,每组操作重复 200 次,时间单位是 ms)

  • 读取 1000 个整数

benchmark_read_int

(测试机器是 Nexus 6 64G,Android 7.1.1,每组操作重复 200 次,时间单位是 ms)

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools