【发布时间】:2012-12-17 04:13:36
【问题描述】:
我使用 SharedPreferences 在我的应用程序的不同活动中写入和稍后读取值。 它过去可以正常工作,但最近它似乎没有被sincronized。我的意思是,我写了一个值,但其他活动仍然读取旧值。 有时它可以正常工作。 有什么想法吗?
编辑: 这是一个示例代码:
首先,来自一个线程:
SharedPreferences prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("ComandToDo", value);
editor.commit();
... some code later:
alarmmanager.set(AlarmManager.RTC_WAKEUP, Miliseconds, sender);
在报警接收器中:
SharedPreferences prefs = contexto.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
int value = prefs.getInt("ComandToDo", -1);
问题来了,因为“值”不是线程中写入的值。
【问题讨论】:
-
你是在不同的线程中进行这些读写吗?把代码贴在你读写的地方。
-
是的,不同的线程、活动、广播接收器……很多地方。想象一下:一个线程在 SharedPreferences 中写入一个值。然后它会创建一个警报。广播接收器在几分钟后读取该值。但是没有更新!
-
需要查看您的代码在哪里读取和写入值。
-
SharedPreferences是线程安全的,但不是进程安全的。如果您已将应用设置为使用多个进程,则可能会遇到此问题。在这种情况下,最简单的解决方案是摆脱多个进程。 -
如果我更改数据库中表的 SharedPreferences 会遇到同样的问题吗?