首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在活动和远程服务之间共享SharedPreferences -安卓错误或功能?

无法在活动和远程服务之间共享SharedPreferences -安卓错误或功能?
EN

Stack Overflow用户
提问于 2012-01-03 17:20:56
回答 3查看 4.3K关注 0票数 1

我想在SharedPreferences更改时更新远程服务。以下代码用于API level 8 (Android 2.2)。

我的活动有一个OnPreferencesChangedListener,它通过服务绑定器对象调用远程服务。远程服务的接口提供了一个方法prefsChanged(void),该方法由侦听器调用。之后,接口方法会计算警报触发某些操作的新时间。此时间也会保存到SharedPreferences,并发送广播。广播由我的activity接收,现在可以显示新的警报时间。活动和远程服务通过调用响应PreferenceManager.getDefaultSharedPreferences(Context)的静态方法GetPrefs(Context)来获取SharedPreferences对象。

对于API级别15 (Android 4.0.3),这将停止工作。调试显示,远程服务看到某个其他版本的SharedPreferences持有不同的内容(旧?)值。记录SharedPreferencesImpl对象时,从活动和远程服务记录时会显示不同的地址。文件系统仅显示一个共享首选项文件。

这是一个bug,还是我的代码碰巧能在API level 8上工作?任何建议都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-05 20:48:36

答案在这里,thx to x90:https://stackoverflow.com/a/8723589/1127492

使用MODE_MULTI_PROCESS这是姜饼(Android2.3)中和之前的遗留行为(但没有文档),当目标是这样的版本时,这个标志是隐含的。对于目标SDK版本高于Android 2.3的应用程序,如果需要,必须显式设置此标志。

票数 8
EN

Stack Overflow用户

发布于 2012-01-03 17:48:16

我会在这里查找:http://developer.android.com/sdk/api_diff/15/changes.html,并查看您在应用程序中使用的更改过的包。

票数 0
EN

Stack Overflow用户

发布于 2012-03-06 16:08:56

当我将我的应用程序从Froyo升级到ICS时,也遇到了同样的问题。根据来自ICS的Context.getSharedPreferences源代码,解决方案应该是Context.MODE_MULTI_PROCESS

代码语言:javascript
运行
复制
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    SharedPreferencesImpl sp;
    synchronized (sSharedPrefs) {
        sp = sSharedPrefs.get(name);
        if (sp == null) {
            File prefsFile = getSharedPrefsFile(name);
            sp = new SharedPreferencesImpl(prefsFile, mode);
            sSharedPrefs.put(name, sp);
            return sp;
        }
    }
    if ((mode & Context.MODE_MULTI_PROCESS) != 0 ||
        getApplicationInfo().targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {
        // If somebody else (some other process) changed the prefs
        // file behind our back, we reload it.  This has been the
        // historical (if undocumented) behavior.
        sp.startReloadIfChangedUnexpectedly();
    }
    return sp;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8710076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档