除非退出并重新打开第一个应用,否则两个应用之间的SharedPreferences不会更新

时间:2015-12-21 22:26:05

标签: android sharedpreferences

我有两个共享首选项的应用程序,我面临的问题是,如果一个应用程序编写一些首选项而另一个应用程序读取它们,它们是获取的旧值,除非退出阅读应用程序然后重新开放即:

如果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始终获取更新的值。

1 个答案:

答案 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_WORLD_WRITEABLE

然而......你想要的实际上是Context.MODE_MULTI_PROCESS但是......它在23中被弃用了,并且不允许并发访问数据。

  

这个常量在API级别23中已弃用.MODIN_MULTI_PROCESS可以   在某些Android版本中无法可靠地运行,而且还可以   不提供任何协调并发修改的机制   跨进程。应用程序不应尝试使用它。代替,   他们应该使用明确的跨流程数据管理方法   例如ContentProvider。

因此,您需要使用ContentProvider。