1

我想跨进程提供某些信息(比如说一个状态变量 - 一个布尔值)。此变量的状态由服务维护,其他应用程序只能读取它(不能修改它)。

我的第一个想法是 SharedPreferences,但文档中有一条说明,多个进程不支持 SharedPreferences 的使用。剩下的就是服务消息传递、AIDL、意图和 ContentProvider。

服务消息传递或 AIDL 是不可能的,因为它总是有一个异步部分(以及 Intents)。我也想到了 ContentProvider ,但这似乎有点夸张/臃肿。写入外部存储将允许其他进程修改数据。

那么,我是否遗漏了任何东西,或者我想要完成的事情真的不可能?(或为此推荐)

提前致谢。

4

1 回答 1

2

服务消息传递或 AIDL 是不可能的,因为它总是有一个异步部分(以及 Intents)。

绑定到基于 AIDL 的服务是异步的,但这是预先完成的。调用 AIDL 定义的方法是同步的。

我也想到了 ContentProvider ,但这似乎有点夸张/臃肿。

您的大多数选择将类似地“为此而夸大/臃肿”。

我错过了什么吗

您可以使用广播Intents来推送对值的更改,尤其是在值不经常更改的情况下。这里的挑战是引导初始值(例如,App B 已安装并需要来自 App A 的值,但必须等到值更改并且 App A 发送广播)。但是,如果您要大量读取该值,这可能值得考虑,因为每次读取执行一次 IPC 可能会增加超出其价值的开销。

此外,您可能希望重新考虑拥有这种依赖关系是否是一个好主意。使用我前面段落中的命名法,如果 App B 需要 App A 维护的一些价值,App B 可能没有 App A 就无法存在。由于用户可以随时卸载 App A,这可能会导致问题。此外,如果此标志是某种控制机制(例如,请不要在其他应用程序执行 Y 时执行 X),您将遇到问题,特别是在两个进程可能真正同时运行的多核设备上.

于 2012-11-09T16:15:16.457 回答