我正在开发一个项目,我有一个核心应用程序和多个插件,这些插件是不同的apks。我想在我的不同模块之间共享一些数据(例如用户名或他的电子邮件地址)。我试图通过将它们添加到清单中来为它们提供所有相同的sharedUserId:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.giom.mymodule1"
android:sharedUserId="com.giom">
我的模块非常相似,并且保存并尝试以相同的方式检索共享偏好:
Context mainAppContext = getActivity().getApplicationContext().createPackageContext("com.giom.mainapp", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
SharedPreferences sharedPreferences = mainAppContext.getSharedPreferences("sharedpreferences", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
sharedPreferences.edit().putString("EMAIL", email).commit();
和
Context mainAppContext = getActivity().getApplicationContext().createPackageContext
("com.giom.mainapp", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
SharedPreferences sharedPreferences = mainAppContext.getSharedPreferences("sharedpreferences", Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
String email = sharedPreferences.getString("EMAIL", null)
这两个代码都来自我的PreferenceActivities,它是FragmentActivity。问题是这似乎有效;例如,如果我更改其中一个模块中的值并重新启动手机,则另一个模块将更改。但是,如果我打开其中一个活动,那么另一个,更改其中一个的值,然后回到另一个,我将仍然得到旧的,直到我重新启动。它就像有某种缓存一样工作......
我的直觉是我没有使用正确的上下文,我应该用其他东西替换getActivity(),但我不知道是什么......
提前感谢您的帮助。
PS:我读到这个方法已经过折旧了,所以如果你知道我应该如何分享我的数据,请随时告诉我:)
答案 0 :(得分:1)
好的,在这里找到答案:https://stackoverflow.com/a/11025235/3628452
getSharedPreferences方法似乎检查.bak文件 从中加载首选项。这就是它在文档中说的原因 它不会跨多个进程工作;最小化I / O,它 当你抓住它们时加载prefs ONCE并且只在它们时备份它们 你关闭你的申请/活动
这意味着如果我不打开/关闭我的模块,我打开它时仍然会从bak文件中获取数据...