我的应用使用SharedPreferences(在PreferenceActivity的帮助下)存储所有设置。但有时会删除所有设置,并将所有值设置回默认值。主要在Android 3.x标签上。 在普通的智能手机上没有问题。
我发现Android应用程序进程被杀死时会删除所有设置。 我注意到了这一点,因为不再显示通知图标。 我也想知道为什么这个过程会在平板电脑而不是智能手机上被杀死。在我的智能手机上,通知图标永远不会消失。
我的应用程序还有一个服务,主要进程和服务都对SharedPreferences进行读写设置。 我有时会注意到,一旦服务写入SharedPreferences,所有设置都会被清除。但每次都不会发生。
有什么想法吗? 我意识到SharedPreferences不应该被不同的进程使用,但它可以在所有智能手机上运行而没有问题!
答案 0 :(得分:20)
我发现了设置消失的原因: 如果两个进程将数据写入SharedPreferences,则可能会将所有SharedPreferences重置为默认值。 在我的情况下,当服务将第一个数据写入SharedPreferences时,所有设置都被清除。
现在,该服务仅提供对SharedPreferences的读访问权限。两个进程写入访问的设置都存储在数据库中。
答案 1 :(得分:3)
我遇到了同样的问题。
如果偶尔使用key = null
编写一个值,则共享首选项中的所有值都将成为默认值。当你使用Eclipse创建新的常量时,这是可能的,默认情况下,它会以null为中心,然后你忘记转到类的开头并将常量更改为某个有意义的值。
如果继续使用该应用程序,共享首选项的读取操作将返回有效值。
但是当上下文改变时(例如,当活动被android杀死并重新创建时)来自共享首选项的所有值都将返回默认值(零)。
请检查共享偏好设置的密钥! 我希望这个答案会对某人有所帮助。
答案 2 :(得分:2)
SharedPreferences通常效果很好,正如您在智能手机上提到的那样没有任何问题。它也适用于平板电脑。但是,最好在服务器上使用sqlite或支持共享首选项,因为每个用户ID数据丢失都是一个问题。