3

我的共享首选项定义如下:

sharedPreferences = context.getSharedPreferences(Consts.SHARED_PREFS_NAME, Context.MODE_MULTI_PROCESS);

我的接收器是在不同的过程中定义的:

<receiver android:name="com.my.name" android:enabled="true" android:process=":myProcessName" />

使用的过程不同,上下文也不同。问题是,在应用程序进程和我的广播接收器进程中使用相同的布尔首选项会返回意外值,就好像读取和写入不在同一个共享布尔首选项上一样。

有任何想法吗?

4

2 回答 2

3

我写了一个库来解决这个问题:https ://github.com/grandcentrix/tray

它使用内部 ContentProvider 来存储数据,完全替代 SharedPreferences,但支持多进程。

于 2015-05-04T17:07:24.277 回答
0

好的,终于明白了。问题的根源在于将 sharedPreferences 保存在静态变量中。

虽然 sharedPrefs 在 MODE_MULTI_PROCESS 中同步多进程读写,但保存我的 sharedPrefs 实例的静态变量没有正确更新。

这是一个稍微昂贵的操作,但每次读取数据时调用一个新的 sharePrefs 实例是有帮助的。

更新:不幸的是,由于此问题的结果不一致,实际上上述“解决方案”根本不是解决方案。

于 2013-10-31T13:24:47.103 回答