多进程共享偏好设置在多进程环境下返回错误的值

3

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

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

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

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

使用的过程不同,上下文也不同。问题是在应用程序进程和广播接收器进程中都使用了相同的布尔型偏好设置,但返回的值却意外地不同,就像读写操作并没有在同一个共享的布尔型偏好设置上进行。

有什么想法吗?

2个回答

3
我写了一个库来解决这个问题:https://github.com/grandcentrix/tray 它使用内部ContentProvider来存储数据,是SharedPreferences的完全替代品,但支持多进程。

谢谢!我差点就自己做了。 :) - domenukk

0

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

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

每次读取数据时调用一个新的sharePrefs实例虽然有点昂贵,但是很有帮助。

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


那么什么是完美的解决方案? - Piyush
你找到解决方案了吗? - BvuRVKyUVlViVIc7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接