多进程共享首选项在多进程环境中返回错误值

时间:2013-10-31 11:53:21

标签: android sharedpreferences multiprocess

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

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

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

它使用内部ContentProvider来存储数据,并且是SharedPreferences的完全替代品,但具有多进程支持。

答案 1 :(得分:0)

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

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

这是一项成本稍高的操作,但每次您阅读数据时都会调用sharePref的新实例。

更新:不幸的是,由于此问题的结果不符合上述&#34;解决方案&#34;事实上,根本不是一个解决方案。