如果我使用 SharedPreferences,使用 onSaveInstanceState 是不是有用

Posted

技术标签:

【中文标题】如果我使用 SharedPreferences,使用 onSaveInstanceState 是不是有用【英文标题】:Is it usefull to use onSaveInstantState if I use SharedPreferences如果我使用 SharedPreferences,使用 onSaveInstanceState 是否有用 【发布时间】:2016-07-02 16:21:17 【问题描述】:

我有一个关于表演的问题。如果我使用 SharedPreferences ,使用 onSaveInstantState 有用吗?

我的意思是,如果值得做一个条件来测试:

if(savedInstanceState != null) 
    // load with on save instant state


else 
    // load with shared preferences

或者我应该总是从 SharedPreferences 加载数据?

谢谢

【问题讨论】:

有什么要求??你要存储什么类型的数据?即使在应用程序被杀死并再次重新打开后,这些数据是否需要保持不变?? 是对象的集合(我使用gson存储在sharedPreferences中),数据需要持久化 【参考方案1】:

是的,它仍然有用,有很多东西无法保存在 SharedPrefrences 字典中,例如列表、地图或任何其他自定义对象。

如果您希望数据通过应用程序使用(在您的应用程序被销毁后)持久化,您应该计划将信息保存在您的SharedPrefrences 上,如果您想通过configuration changes 持久化数据,则将信息保存在SaveInstanceState 包中(旋转,字体大小改变,语言改变)。

【讨论】:

其实它是一个对象的集合,所以我使用 Gson 来保存这些数据。顺便说一句,是否值得使用 Gson 和 SharedPreferences(这是一个小集合,最多:100 个项目)或使用 SQLite? 那将是另一个问题,但我会反序列化 JSON 并将对象保存在 SQLite 数据库中。【参考方案2】:

如果您需要在任何情况下保持数据的持久性,请选择 SQLite

【讨论】:

这就是为什么我想知道 Sqlite 会比 Sharedpreference + gson 快还是慢 SQLite 将在数据操作方面提供更多帮助。如果您需要查询某些条件的数据,SQLite 会有所帮助,但在 SharedPreferences 上无能为力。 问题是我不需要编辑这些日期,只需阅读它们 谢谢,我想我会继续使用 Sharedpreference 只有一件事,SharedPreference 数据可以被删除。

以上是关于如果我使用 SharedPreferences,使用 onSaveInstanceState 是不是有用的主要内容,如果未能解决你的问题,请参考以下文章

SharedPreferences 不保存强制关闭应用程序

SharedPreferences 不保存布尔属性

onpause android中使用SharedPreferences存储数据的效果

SharedPreferences 的另一种场景的用法

SharedPreferences 应用程序上下文与活动上下文

加密 SharedPreferences 中的数据