android - 共享首选项自动删除

标签 android sharedpreferences

我正在开发一个使用后台服务的应用程序,并将我的数据保存到共享首选项(因为我知道 Android 可以在低内存状态时终止服务)。它运行良好,我会定期将数据保存到首选项中。但作为一种罕见的情况,我注意到当 Android 终止我的服务并重新启动它时(这之间有大约 20-30 秒的间隔),在此间隔期间我的首选项被自动清除。我检查了 dumpstate 以推断这背后的原因,但我不明白为什么会这样。

这是日志的相关部分,表明从偏好中清除了数据:

    06-25 17:30:34.848  2452  2966 V ApplicationPolicy: isApplicationStateBlocked userId 0 pkgname com.example.gaurav
06-25 17:30:34.863  2452  2966 D EnterpriseDeviceManager: ContainerId: 0
06-25 17:30:34.863  2452  2966 V ApplicationPolicy: isApplicationStateBlocked userId 0 pkgname com.example.gaurav
06-25 17:30:34.863  2452  2966 D PackageManager: START CLEAR APPLICATION USER DATA: observer{1126181288}
06-25 17:30:34.863  2452  2966 D PackageManager: pkg{<packageName>}
06-25 17:30:34.863  2452  2966 D PackageManager: user{0}
06-25 17:30:34.898  2831  2831 D ContainerEventsRelayManager: <<< Intent action is >>> : android.intent.action.PACKAGE_RESTARTED
06-25 17:30:34.898  2831  2831 D ContainerEventsRelayManager: <<< Intent data is   >>> : package:com.example.gaurav
06-25 17:30:34.898  2695  2695 D ContexualWidgetMonitor:  id = 0
06-25 17:30:34.898  2695  2695 D ContexualWidgetMonitor: action =android.intent.action.PACKAGE_RESTARTED
06-25 17:30:34.898  2695  2695 D ContexualWidgetMonitor: pkg =null
06-25 17:30:34.898  2695  2695 D ContexualWidgetMonitor: mCheckMissedEvent =false
06-25 17:30:34.903  2831  2831 D ContainerEventsRelayManager: <<< Intent action is >>> : android.intent.action.PACKAGE_DATA_CLEARED
06-25 17:30:34.903  2831  2831 D ContainerEventsRelayManager: <<< Intent data is   >>> : package:com.example.gaurav
06-25 17:30:34.908  2452  2580 I PackageManager: remove MCS_UNBIND message and Posting MCS_UNBIND 10 secs later

虽然这种情况没有再次发生,但我真的很想知道幕后发生了什么,为什么会发生。 我在这里搜索了其他类似的线程,但它们表示将空键插入到首选项中的情况,所以我想这完全不同。

如有任何帮助,我们将不胜感激。另外,作为一个信息,这个问题发生在 Samsung Galaxy Note 2 设备上。

最佳答案

发生这种情况是因为您正在后台线程中编写首选项。 这是一个已知问题,当两个线程访问同一个首选项文件时,首选项会被删除。 您不应将 SharedPreferences 与进程一起使用,而应使用数据库。

这是another SO question有同样的问题。

我正在经历完全相同的问题,我打算使用 SQLite。

关于android - 共享首选项自动删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056285/

相关文章:

android - 如何在不改变按钮大小的情况下改变按钮的颜色?

android - 如何将一个runnable放入bundle中?

android - 在 fragment 中加载 preferenceactivity 值错误

java - 保存和检索数组并在 ListView 中显示

安卓。 App关闭后如何保存用户名和密码?

java - 如何调用线程方法

android - Android 九补丁绘图中红色的含义

java - 类的静态 block 中的Android getSharedPreferences

Android:输入时如何从TimePicker获取时间

java - 检查用户名和密码是否正确