Java 在Android中,将对象作为JSON字符串存储在SharedReferences中是不是有点不好?

Java 在Android中,将对象作为JSON字符串存储在SharedReferences中是不是有点不好?,java,android,json,sharedpreferences,Java,Android,Json,Sharedpreferences,作为一个最近发现了NoSQL文档存储(namley CouchDB)简单性之美的人,当我需要持久存储简单对象或小数组以使用Json序列化程序将此数据作为Json字符串存储在共享首选项中时,我发现自己非常有诱惑力。我看到的好处是: 没有增加复杂性,因为(在我的项目中)我已经有了一个用于RESTAPI的JSON框架,可以轻松地转换JSON/对象 我还想说:复杂性更低,因为我可以只使用POJO,而不必手动处理键/值 与Java系列化或Androids parcable相比,它或多或少是一种通用格式,

作为一个最近发现了NoSQL文档存储(namley CouchDB)简单性之美的人,当我需要持久存储简单对象或小数组以使用Json序列化程序将此数据作为Json字符串存储在共享首选项中时,我发现自己非常有诱惑力。我看到的好处是:

  • 没有增加复杂性,因为(在我的项目中)我已经有了一个用于RESTAPI的JSON框架,可以轻松地转换JSON/对象
  • 我还想说:复杂性更低,因为我可以只使用POJO,而不必手动处理键/值
  • 与Java系列化或Androids parcable相比,它或多或少是一种通用格式,即使对于人类也很容易理解,并且很容易解析不同的框架
  • 使用正确的工具,很容易处理数据模型更改和配置必须迁移的更新情况(例如,忽略未知属性并在Jackson中设置新的默认值)
  • 同样,使用正确的工具,可以在一行代码中完成序列化:
    mapper.writeValueAsString(myObject)
我看到的缺点是:

  • 如果使用舒适的序列化方式(例如Jackson中的数据绑定),速度会很慢-但我不确定这在“保存配置”用例中起到什么作用
  • 需要稍微多一点的空间——我想这也可以忽略不计
我知道这种方法只有在合理的小数据情况下才可行(但我想这同样适用于一般的SharedReference),如果只在“保存配置”或写/读比较稀疏的类似用例中使用,则性能影响可以忽略不计


在所描述的场景中,我正在寻找支持/反对这种方法的论据,或者寻找我忽略或可能出现的问题。

将小数据对象存储在
共享引用中没有坏处。

但是,有一点您应该记住,
SharedReferences
不能跨多个进程正常工作。因此,如果您计划跨流程使用SharedReference,则应避免使用它们。

因此,几年后,我的发现如下:

  • 使用基于反射的序列化时,Json序列化可能会很慢,尤其是当内容复杂和/或很长时
  • 在使用Proguard时,必须特别注意不要混淆要序列化的模型的名称
  • 移民很难——这是我最大的缺点
因此,这取决于用例。对于缓存来说,这可能没问题,因为如果数据在更新后损坏,这只是性能损失,另一方面缓存应该很快(内存层可以缓解这一问题)


如果您需要结构化数据的数据存储,请使用数据库或类似Google's Room的ORM。

我一直在想同样的事情。我有一个在共享内存中存储2or3个对象并经常更新它们的应用程序,我还没有遇到任何问题。请记住,这是一个小数据