共享相同应用程序的两个进程之间的首选项

我正在编写一个包含UI和独立进程的Android应用程序。 我想在主进程和我的应用程序中定义的服务之间共享简单的信息,这是在不同的进程中执行的。 我发现为了这个目的而使用AIDL进行进程间通信很麻烦。

问题是:使用应用程序的共享首选项来安全地在这两个进程之间进行通信是否安全? 这是:读取和写入相同的共享首选项。

我想知道它是否真的有效。 在android开发人员参考关于共享首选项(http://developer.android.com/reference/android/content/SharedPreferences.html)他们说: 注意:目前这个类不支持跨多个进程使用。 这将在稍后添加。 但我不知道这到底是什么意思。

谢谢你的帮助

Solutions Collecting From Web of "共享相同应用程序的两个进程之间的首选项"

在Android <2.3它的作品。 一个进程可以写入更改,另一个进程可以读取更改。 读取/写入共享偏好文件的代码(它们实际上存储在文件中)在读/写之前检查文件是否有任何改变,并相应地更新它们的caching版本。

在Android 2.3中它可以工作,但是在调用getSharedPreferences()时需要特别设置MODE_MULTI_PROCESS

在Android 2.3中,它被破坏,它不起作用:-(

请注意, MODE_MULTI_PROCESS在API级别23(Android M)中已被弃用。

您可以查看https://github.com/hamsterksu/MultiprocessPreferences库,该库提供了类似SharedPreferences的API,以便通过ContentProvider访问SharedPreferences数据&#x3002; 在Google从Android 6中删除MODE_MULTI_PROCESS之后,它看起来也是一个很好的替代品。

没有; 这样做是不安全的。 你引用的说明是正确的。 如果您尝试在多个进程中使用SharedPreferences ,则会出现已知的问题。 (请参阅https://code.google.com/p/android/issues/detail?id=66625 。)

如果您需要更多证据,请查看SharedPreferencesImpl的源代码,特别是保存首选项的部分。

我已经通过防止这两个进程同时访问SharedPreferences文件解决此问题。 (这是一种提供跨进程locking的方法,下面是我写的一个完整的示例实现 。)

警告 :不幸的是, MODE_MULTI_PROCESS在Android M中已被弃用,所以它可能会在以后的版本中停止工作。 使用ContentProvider等替代技术可能是更好的select。