Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/featue jd api get all #403

Closed
wants to merge 3 commits into from

Conversation

SireAI
Copy link

@SireAI SireAI commented Mar 23, 2020

###Android MMKV getAll()函数功能扩展

####1.背景

最新Android MMKV 函数库 不支持getAll()函数,该函数返回一个文件中所有的KV键值对,并且将值解释为相应正确的类型。在使用MMKV的实践中,由于历史原因,多处SharedPreference 使用getAll()方法导致无法完美替换。

####2.PR提交扩展的功能

本次PR提交扩展MMKV支持getAll()函数,解决类型擦除问题,以达到对 SharedPreference 的完美迁移。

####3.兼容性以及局限

  • 若应用初次接入含有该功能的MMKV版本,那么所有SP文件能达到完美迁移,可以使用getAll方法。
  • 若应用已经在使用MMKV,升级到具有该功能的版本,已经迁移的SP文件,getAll方法仍然无法生效,默认返回空Map。
  • 若应用已经在使用MMKV,升级到具有该功能的版本,迁移剩余的SP文件,这些文件迁移后将支持getAll()方法。
  • 在含有该功能的版本中,使用getAll方法时,若值是Parceble类型,在Map中将以byte数组的形式存在。开发者自行判断该byte数组是否是Parceble类型,使用mmkv中的反序列化方法decodeParcelable来解析成正确的Parceble类型。

####4.原理

功能实现的核心思想:将值的类型信息随着数据一起持久化,让值数据具有”自我解释能力“。在遍历数据时使用数据的类型信息来还原数据的类型,返回java层。

兼容性的处理方式:新创建文件的元信息文件中将包含一个特殊的标记 TYPE_EXPLAIN,老文件不含有此标记。含有该标的文件读写操作将按照可解释类型的路径处理,不含有该标记的文件读写操作使用原有路径。

@lingol lingol closed this Mar 23, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants