我的应用程序的一些用户抱怨说,有时(以随机的方式)我的应用程序的设置会恢复到他们的默认状态(通常是在手机重启之后)。然而,我从未设法重现这个问题。我在想,这是因为在我的应用程序中的许多地方,我有一段代码调用共享首选项编辑器并提交更改-如果我试图同时提交对同一首选项文件的几个更改,它能解决破坏共享首选项文件的问题吗?(多线程应用程序)
我真的迷路了。我试着在网上找了几个小时,想找到一个解决方案,但没有成功。
如果任何人有任何想法,我可以开始调查,我将不胜感激。
谢谢,阿米特·莫兰
发布于 2011-10-30 18:43:30
我会回应其他的答案-如果你不想损坏文件,你需要避免冲突-我会进一步暗示你可能误用了SharedPreferences。
SP设计用于存储有关应用程序用户设置的小片段信息,如音量或是否正在播放音乐等。
SP不是为存储频繁变化的数据和/或大量数据而设计的,尝试这样做并不是一个好主意(出于您已经发现的原因和其他一些原因)。
请记住,SP实际上只是一个XML文件-每次更改它时,您都会招致解析和重新创建的开销!
我认为,应用程序在多个线程中更新SP的想法有点疯狂--你需要一种更好的方式来管理和存储你保存的数据--它将以多种方式为你带来回报……
发布于 2011-10-30 14:21:02
我建议您使用单例来管理首选项。无论你是通过实现一个true java singleton,还是使用安卓的Application Context来实现这一点,都取决于你。(请参阅this question,了解支持/反对每种方法的几个很好的论点)
对于像SharedPreferences
这样的东西,这是一种管理它们的好方法,特别是对于多线程应用程序。这可能会消除一些关于提交是否相互冲突的问题。这可能不是问题的全部,但它是开始的地方。
发布于 2012-03-23 18:32:05
我有一个类似的问题:我的偏好没有可靠地保存。在一些设备上(在我的例子中是XOOM-Tablet),数据有时会丢失,有时不会。在提交新数据之前,我只需在编辑器上调用clear()就解决了这个问题。
Shared Preferences get lost after shutting down device or killing the app
https://stackoverflow.com/questions/7943573
复制相似问题