我的共享首选项定义如下:
sharedPreferences = context.getSharedPreferences(Consts.SHARED_PREFS_NAME, Context.MODE_MULTI_PROCESS);
我的接收器是在不同的过程中定义的:
<receiver android:name="com.my.name" android:enabled="true" android:process=":myProcessName" />
使用的流程不同,上下文也不同。 问题是,在应用程序进程和我的broadcastreceiver进程中使用相同的布尔首选项返回意外值,就好像读取和写入不在同一共享布尔首选项上一样。
有什么想法吗?
答案 0 :(得分:2)
我写了一个库来解决这个问题:https://github.com/grandcentrix/tray
它使用内部ContentProvider来存储数据,并且是SharedPreferences的完全替代品,但具有多进程支持。
答案 1 :(得分:0)
好的,终于明白了。问题的基础是将sharedPreferences保存在静态变量中。
虽然sharedPrefs在MODE_MULTI_PROCESS中同步多进程读取和写入,但保存我的sharedPrefs实例的静态变量未正确更新。
这是一项成本稍高的操作,但每次您阅读数据时都会调用sharePref的新实例。
更新:不幸的是,由于此问题的结果不符合上述&#34;解决方案&#34;事实上,根本不是一个解决方案。