Android - 共享首选项有时会丢失

Ami*_*ran 20 android sharedpreferences

我的应用程序的一些用户抱怨有时(以随机方式)我的应用程序的设置被恢复到其默认状态(通常在重新启动手机后).我从来没有设法重现这个问题.我认为这是因为在我的应用程序的许多地方我有一段代码调用共享首选项编辑器并提交更改 - 如果我尝试提交多个更改,它是否可以解决共享首选项文件的问题相同的偏好文件同时?(多线程应用程序)

我真的迷路了.我试着在网上找了几个小时才找到一个没有成功的解决方案.

如果有人有一个想法,所以我可以开始调查,我将不胜感激.

谢谢,阿米特莫兰

小智 16

我会回答其他答案 - 如果你不想破坏文件,你需要避免冲突 - 我会进一步建议你可能会误导SharedPreferences.

SP旨在存储有关您的应用的小块信息 - 用户设置,如音量或音乐是否正在播放或类似的东西.

SP不是为存储经常更改的数据和/或大量数据而设计的,尝试这样做是个坏主意(出于您发现的原因和其他一些原因).

请记住,SP实际上只是一个XML文件 - 每次更改它时,都会产生解析和重新创建的开销!

在一个以上的线程中更新SP的应用程序的想法我觉得有点疯狂 - 你需要一种更好的方法来管理和存储你正在保存的数据 - 它会以多种方式为你付出代价. .

  • 如果我正在更改设置/数据,我会将数据保存在内存中(在活动类中的对象或类似内容中)并且只将它保存到onPause()中的SharedPreferences或数据库或其他任何内容中真的没有优势频繁地将数据写入手机 - 它通常非常慢(特别是写入SD卡) - 只要确保在应用程序暂停或其他情况下写入... (8认同)

got*_*o10 6

根据SharedPreferences.Editor文档:

请注意,当两个编辑器同时修改首选项时,最后一个调用commit会获胜.

由此我得知多个同时提交不会消除您的首选项,但是如果Editor同时使用多个实例,则可能不是您尝试编写的所有更改都将被写入.为避免这种情况,您可以将所有首选项修改放在synchronized块中,甚至可以使用一个同步静态方法来编写所有首选项.

  • 是的,我看到了这个文档.我的问题是所有首选项都恢复为默认值,而不是某些首选项未保存... (3认同)