常见问题
赋值无效¶
错误示例
如果使用serialLazy以上方式有效(因为他自带临时变量)修改无效
修改变量里面的字段并不会更新本地数据, 下次读取的还是旧的值
解决办法, 使用临时变量
读取旧数据崩溃¶
如果开发者未自定义SerializeHook而使用默认序列化, 很可能导致危险数据
数据损坏
增删字段可能导致无法读取数据, 由于Serializable
和Parcelable
本身局限导致
解决办法是自定义SerializeHook
, 使用Json/Protobuf
等序列化框架实现数据存储
Serializable
- 增删字段导致读取失败, 使用
serialVersionUUID
可解决 - 但新增字段默认值将为零值或null, 而不是声明的默认值
Parcelable
- 读取新增的非空类型字段会崩溃(如果不存在)
- 字段顺序被打乱会导致读取失败
序列化函数类型¶
一些序列化框架不支持包含函数类型, 例如kotlin-serialization
, 添加@Transient
即可
迁移旧数据¶
-
以前使用MMKV, 由于本项目基于MMKV所以不需要迁移
-
以前使用SharedPreferences, 可以使用MMKV迁移方法
更多数据迁移需求请实现SerializeHook
接口来自定义