应用程序强制关闭或崩溃时,共享首选项将重置。

10

我注意到,如果应用程序被强制关闭或由于某些原因被系统终止,我的应用程序的SharedPreferences将完全重置。显然,是的,我应该避免首先出现崩溃,但这确实会发生。如果确实发生了这种情况,则用户不应该失去他们使用Preferences存储的所有设置和其他数据。

我在Google Groups上找到了这个帖子,但他们无法解决它。

是否有任何见解可以解释为什么或如何发生这种情况,以及是否有方法可以防止它?

此外,我已经在2.1和2.2设备上看到了这一点。它会在每次崩溃时发生,而不仅仅是一些崩溃。

谢谢


1
你在编辑完你的偏好设置后是否提交了更改? - Falmarri
没错。它们可以很好地通过正常的生命周期甚至在使用任务管理器关闭应用程序时保持不变。似乎只有在崩溃/强制关闭时才会重置。 - cottonBallPaws
1个回答

10

经过一番搜索,我终于找到了问题的根源。由于我的代码出现错误,一个字符串偏好设置被保存了一个空键值。因此,在崩溃后当它尝试加载偏好设置时,在偏好设置 XML 文件中出现空白导致偏好设置崩溃并重置。不知何故,我无法获取偏好设置崩溃的堆栈跟踪,只能看到最初崩溃的直接原因。

为了添加更多细节,以便其他可能遇到类似问题的人在未来可以参考:

包含偏好设置的 XML 文件在强制关闭按钮按下之前和之后保持不变。但是,在下次访问共享偏好设置时,XML 文件将被清除并重新开始。


1
感谢您的跟进。我也被这个问题困扰过。直到这促使我寻找一下我不小心留下的空键,才发现它并不容易被检测出来。 - mmeyer
@littleFluffykitty:强制关闭应用程序时,SQLite 数据是否也会被清除? - Ashwin
我曾经遇到过同样的问题。我使用文件来存储数据,这样即使应用程序崩溃也不会清除/删除数据。此外,在从该文件读取后,我在Application onCreate中加载了sharedpref。 - jrh
我挖掘了成千上万行代码来查找错误并找到了你的答案。同样的问题 :) 谢谢。因为一个空键,我花了一天时间解决了这个问题。 - Enes
1
这怎么算是一个解决方案呢?它并没有解决如何修复问题的方法。 - Treewallie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接