共享首选项自动删除

时间:2015-06-25 16:52:59

标签: 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

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

任何帮助将不胜感激。此外,作为信息,三星Galaxy Note 2设备上出现此问题。

1 个答案:

答案 0 :(得分:3)

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

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

我正在经历完全相同的问题,我正在寻找SQLite。