android - 跨进程共享状态变量

标签 android service ipc sharedpreferences process

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

我首先想到的是 SharedPreferences,但文档中有一条注释指出不支持跨多个进程使用 SharedPreferences。这给我留下了服务消息传递、AIDL、 Intent 和 ContentProvider。

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

那么,我是不是遗漏了什么或者我想要完成的事情真的不可能实现? (或为此推荐)

提前致谢。

最佳答案

Service messaging or AIDL is out of the question because it always has an asynchronous part to it (as well as Intents).

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

I also thought of ContentProvider but it seems a little bit exaggerated/bloated just for this.

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

am I missing anything

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

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

关于android - 跨进程共享状态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311410/

相关文章:

windows - 远程安装服务

python - 使用 Node.js/python 的生产者/消费者 + Worker 架构

java - extras.getString() 检索正​​确的值但分配 null

java - 以什么开头时如何解析json文件

android - 如何点击textview将打开微调器android

android.location.Address 无法被 AIDL 识别?

c - 使用共享内存在进程之间发送字符串

c - 消息队列(IPC)接收进程不打印C中接收到的数据

java - 一个类中存在两个单击监听器的问题

android - 横向模式下的软键盘不会在 Android 模拟器中弹出