我有两个共享首选项的应用程序,我面临的问题是,如果一个应用程序编写一些首选项而另一个应用程序读取它们,它们是获取的旧值,除非退出阅读应用程序然后重新开放即:
如果app A正在运行并从首选项中读取值:
...
prefs = m_context.getSharedPreferences (name, Context.MODE_PRIVATE);
m_retryCount = prefs.getInt(RETRY_COUNT, 0);
假设检索到的值是10。
现在,如果应用B运行并写入首选项:
prefs = cityidCtx.getSharedPreferences (prefsName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences.Editor editor = prefs.edit ();
editor.putInt(CityIdHandsetState.RETRY_COUNT, this.m_retryCount);
editor.commit ();
让我们说写的值是20。
现在,如果应用程序A在应用程序B写入新值20之后再次读取首选项,那么应用程序A获得的值仍然是10.但是如果退出应用程序A然后重新打开,那么它读取的值现在将是20岁。
如何解决这个问题,以便app A始终获取更新的值。
答案 0 :(得分:2)
您使用了错误的FLAG, that flag isn't used there
与createPackageContext(String,int)一起使用的标志:ignore any 对请求的上下文的安全限制,允许它 总是加载。与CONTEXT_INCLUDE_CODE一起使用以允许代码 即使在不安全的情况下也要加载到一个过程中。使用 极度关心!
您正在使用Context.getSharedPreferences(String name, int mode)声明
操作模式。使用0或MODE_PRIVATE进行默认操作, MODE_WORLD_READABLE和MODE_WORLD_WRITEABLE控制权限。
你恰好碰巧碰巧他们碰巧有类似的价值观。你需要使用......
然而......你想要的实际上是Context.MODE_MULTI_PROCESS但是......它在23中被弃用了,并且不允许并发访问数据。
这个常量在API级别23中已弃用.MODIN_MULTI_PROCESS可以 在某些Android版本中无法可靠地运行,而且还可以 不提供任何协调并发修改的机制 跨进程。应用程序不应尝试使用它。代替, 他们应该使用明确的跨流程数据管理方法 例如ContentProvider。
因此,您需要使用ContentProvider。