如果在另一个进程中编辑 sharedPreferences 将不会更新

Posted

技术标签:

【中文标题】如果在另一个进程中编辑 sharedPreferences 将不会更新【英文标题】:sharedPreferences wont update if edited in another process 【发布时间】:2016-06-12 10:56:31 【问题描述】:

我有一个统一活动,它在我的应用程序之外的另一个进程中启动:

  <activity
        android:name=".UnityActivity"
        android:process=":UnityKillsMe"/>

我保存了用this question 加密的SharedPreferences(以防这会影响我的问题,我不知道)。

现在如果我想在process=":UnityKillsMe" 中编辑sharedPreference,在mainProcess 中无法访问编辑,它只需要SharedPreferences 的旧版本。直到我杀死 mainProcess 并再次启动应用程序。如果我不杀死mainProcess,并编辑SharedPreferences,而它们已经在process=":UnityKillsMe" 中进行了编辑,那么编辑将被覆盖并丢失。

如何在主进程中刷新SharedPreferences

【问题讨论】:

另一个进程? unity是完全单线程的。您不应以任何方式使用或参与 Android 级别的其他进程。没有任何理由你需要做任何这样的事情来制作一个简单的视频游戏。也许您应该说明您要做什么? 感谢@JoeBlow 的帮助。这个问题更多的是关于java而不是统一,我从我在android上的Java应用程序启动我的untiyactivity(我的inapp视频游戏)。但我用下面的答案修复了它。 亲爱的伊曼纽尔。很公平,我明白你的意思。将统一项目视为 Android 上的单独活动是一个巨大的 PITA。我希望它不会给您带来太多麻烦! 【参考方案1】:

SharedPreferences 在 Android 中的当前实现不是进程安全的。

来自docs:

注意:目前这个类不支持跨多个使用 过程。这将在稍后添加。

问题是您真的在您的应用程序中需要多个进程吗?

如果你真的这样做,我建议你看看Tray,或者考虑一些其他形式的持久存储,比如数据库。

也请查看this answer。

【讨论】:

以上是关于如果在另一个进程中编辑 sharedPreferences 将不会更新的主要内容,如果未能解决你的问题,请参考以下文章

Android中SharedPreference多进程数据共享出错

SharedPreferences无法在活动中使用

android中SharedPreferences 读取不到数据的问题

细数 SharedPreferences 的那些槽点 !

使用SharedPreferences即时存储之后,不能即时获取到数据

Android SharedPreferences源码分析