跨活动/片段生命周期存储hashmap的最佳方式

时间:2016-03-25 21:05:47

标签: java android serialization hashmap activity-lifecycle

我有一个HashMap<String, Integer>我需要在整个活动生命周期,应用重启等时恢复/重启。 有以下选择:
1)使用共享首选项并循环遍历所有键,并将<key,value>对完全相同地存储在共享首选项中 2)将hashmap转换为JSON并在共享首选项中保存为String 3)由于hashmap是可序列化的,因此将其保存在内部存储器中。

但明智的最佳方法是什么?什么是标准/最佳做法?
对我来说似乎是选项(3),但是从各个帖子中,很多人都说相反。对于我对hashmap的具体定义,可序列化的开销是多少?即没有复杂的对象键值?

3 个答案:

答案 0 :(得分:1)

选项(3)。为什么呢?

1)共享首选项使用XML文件存储数据。您必须读取文件并解析XML。(读取+解析)

2)你必须阅读文件并解析XML,然后解析JSON。(阅读+解析+解析)

3)您只需阅读文件并初始化hashmap。(阅读)

为什么人们不使用option3?

因为他们希望与其他技术进行通信,因此可移植性将成为高级别要求。

答案 1 :(得分:0)

2)是标准和最佳实践。

我会考虑1)不良做法,因为它滥用SharedPreferences。

关于性能:您必须根据您的用例量身定制此基准。我希望2)最快,但根据地图大小和JSON转换实现,3)可能会更快。

旁注:如果您的地图少于1000个条目我不会担心性能

  

过早优化是万恶之源

     

- 唐纳德克努特

答案 2 :(得分:0)

您是否认为Application类或任何单例作为数据容器可以在配置更改后继续存在?

您也可以使用保留的片段来实现此目的。

这些变体在应用运行时速度最快。

因此,在重新启动之间保存状态,您必须以这种或那种方式使用序列化。

Google团队声称Parcelable界面比经典的Serializable(SO link)更快。

另外JSON也考虑GSON(SO link)。

当然,探查员是你的最终决定裁判......