-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
FAQ_cn
-
什么情况下应该使用 MMKV?
如果你遇到以下场景,你应该选择 MMKV:- 你的 iOS/Android App 需要一个通用的 key-value 存储组件;
- 你担心频繁写入的性能;
- 跨进程访问往往导致你的 Android App 卡顿(ANR).
-
MMKV 是否支持 Swift?
支持,MMKV 兼容 Swift,具体用法见 demo。 -
MMKV 是否支持 Kotlin?
支持,MMKV 在 Java 和 Kotlin 下都能完美运行,具体用法参见 demo。 -
MMKV 的加密用了哪种算法?
MMKV 使用了 AES CFB-128 算法来加密/解密。具体是采用了 OpenSSL(1.1.0i 版)的实现。我们选择 CFB 而不是常见的 CBC 算法,主要是因为 MMKV 使用 append-only 实现插入/更新操作,流式加密算法更加合适。 -
MMKV 有哪些限制?
MMKV 在大部分情况下都性能强劲,key/value 的数量和长度都没有限制。然而 MMKV 在内存里缓存了所有的 key-value,在总大小比较大的情况下(例如 100M+),App 可能会爆内存,触发重整回写时,写入速度也会变慢。支持大文件的 MMKV 正在开发中,有望在下一个大版本发布。 -
MMKV 对 FD(文件描述符)的使用情况如何?
MMKV 背后是一个被 mmap 映射到内存的文件。另外 MMKV 还使用了一个元数据文件来记录 CRC32 摘要,存储加密初始向量(IR),以及用来同步多进程操作。所以每个 MMKV 实例会使用两个 FD。如果你担心 FD 占用,你可以调用close()
函数——如果你确定该实例短期内不会再用到的话。注意close()
后不应该再访问该对象,后续要用的话,必须重新初始化该实例。 -
如何备份 MMKV 的数据(并恢复/迁移到另一台设备)?
如上所述,每个 MMKV 用了一个数据文件和一个元数据文件。所以你必须备份 MMKV 文件本身,以及关联的*.crc
元数据文件。 -
iOS 版 MMKV 支持多进程读写吗?
MMKV 从 v1.1.0 开始支持 iOS 多进程读写。 -
Android 版 MMKV 的 Ashmem 是什么东西,什么情况下应该用这个模式?
Ashmem MMKV 是 Android 里的一个 memory-only 的多进程共享 key-value 存储,在一个 App 的所有进程退出后,会自动消失。她不使用任何文件来做存储,因此很适合在一个 App 内的众多进程之间共享敏感数据。 -
在某些 Android 设备上(API level 19)遇到
java.lang.UnsatisfiedLinkError
。这是怎么回事,我应该采取什么措施?
API level 19 的 Android 设备在安装、更新 APK 时,可能会遗漏 libmmkv.so。针对这个问题,已有专门的开源库 ReLinker 解决。你可以使用这个开源库,结合调用MMKV.initialize(String rootDir, LibLoader loader)
来加载 MMKV。 可以参考 mmkvdemo 里的示例代码. -
我可以关掉或重定向 MMKV 的日志吗?
是可以的。MMKV 在 v1.0.17 之后添加了相应的 API,具体可以参考 mmkvdemo 里的示例代码。 -
为什么我的 MMKV 没能在多进程间共享数据?
最常见的错误是没有使用多进程模式访问这个 MMKV 实例。某些情况下(Android),你以为App里没有多进程,实质上还是创建了多进程,例如 Service、重复打开App、同一个进程对象被创建多次,等等。
有一个最简单的排查办法,就是将所有访问此 MMKV 实例的地方,都用上MULTI_PROCESS
多进程模式,看看问题是否解决。 -
为什么 MMKV 在 App 重启后丢失数据?
有几个可能的原因:- 没有使用多进程模式访问这个 MMKV 实例,如上文所述。最简单的排查办法,就是将所有访问此 MMKV 实例的地方,都用上
MULTI_PROCESS
多进程模式,看看问题是否解决。 - 文件损坏。通常发生在设备意外重启后,例如设备断电、用户强制关机、摔手机等。你可以设置 recover 策略;或在合适的时机手工调用
sync()
,将内存数据同步到文件。 - MMKV 有未知的 bug。当上述方法都尝试后,问题还在,可以提一个 issue。
- 没有使用多进程模式访问这个 MMKV 实例,如上文所述。最简单的排查办法,就是将所有访问此 MMKV 实例的地方,都用上
-
为什么 MMKV 会 crash?
有几个可能的原因:- 没有使用多进程模式访问这个 MMKV 实例,如上文所述。最简单的排查办法,就是将所有访问此 MMKV 实例的地方,都用上
MULTI_PROCESS
多进程模式,看看问题是否解决。 - MMKV 有未知的 bug。当上述方法都尝试后,问题还在,可以提一个 issue。
- 没有使用多进程模式访问这个 MMKV 实例,如上文所述。最简单的排查办法,就是将所有访问此 MMKV 实例的地方,都用上
MMKV is published under the BSD 3-Clause license. For details check out the LICENSE.TXT.
Check out the CHANGELOG.md for details of change history.
If you are interested in contributing, check out the CONTRIBUTING.md, also join our Tencent OpenSource Plan.
To give clarity of what is expected of our members, MMKV has adopted the code of conduct defined by the Contributor Covenant, which is widely used. And we think it articulates our values well. For more, check out the Code of Conduct.
Check out the FAQ first. Should there be any questions, don't hesitate to create issues.
User privacy is taken very seriously: MMKV does not obtain, collect or upload any personal information. Please refer to the MMKV SDK Personal Information Protection Rules for details.
- In English
- 中文
- In English
- 中文
- In English
- 中文
-
In English
-
中文
-
Golang