我希望跨进程提供某些信息(比如一个状态变量 - 布尔值)。此变量的状态由服务维护,其他应用程序只能读取它(不能修改它)。
我的第一个想法是SharedPreferences,但有关于文档的说明,指出多个进程不支持SharedPreferences使用。这让我得到了服务消息,AIDL,意图和ContentProvider。
服务消息或AIDL是不可能的,因为它始终具有异步部分(以及Intents)。我也想过ContentProvider,但它似乎有点夸张/臃肿。写入外部存储将允许其他进程修改数据。
所以,我错过了什么或者我想要完成的事情真的不可能吗? (或就此而推荐)
提前致谢。
答案 0 :(得分:2)
服务消息或AIDL是不可能的,因为它总是有异步部分(以及Intents)。
绑定到基于AIDL的服务是异步的,但这是预先完成的。调用AIDL定义的方法是同步的。
我也想过ContentProvider但是它似乎有点夸张/臃肿。
你的大多数选择同样会“夸大/臃肿”。
我错过了什么
您可以使用广播Intents
推送对值的更改,尤其是在值不经常更改的情况下。这里的挑战是引导初始值(例如,安装App B并且需要来自App A的值,但是必须等到值改变并且App A发送广播)。但是,如果您将大量读取该值,则可能值得考虑,因为每次读取执行IPC可能会增加额外的开销。
此外,您可能希望重新考虑首先是否有这种依赖是一个好主意。使用前一段中的命名法,如果没有App A,App B可能不存在,如果它需要App A维护的某些值。由于用户可以随时卸载App A,这可能会导致问题。此外,如果这个标志意味着某种控制机制(例如,当其他应用程序正在执行Y时请不要执行X),您将遇到问题,特别是在多核设备上,其中两个进程可能同时真正运行