需要一些关于多应用 IPC 的指导

Posted

技术标签:

【中文标题】需要一些关于多应用 IPC 的指导【英文标题】:Need some guidance with multi-app IPC 【发布时间】:2012-02-04 13:09:53 【问题描述】:

我在这里真正寻找的只是一些指导。我正在尝试创建我的第一个官方 android 应用程序。我是 java/droid 新手,但不是编程新手。在过去的一个月里,我创建了很多小实验活动、服务、线程等等,它们都按计划运行。所以现在我想把所有东西都绑在一起,但运气不好。

在一个新项目中,我已将胆量编译到“my.main.package”中,它运行一个服务,该服务不断处理其他客户端/应用程序可以使用的数据……这就是我的计划。例如,在此服务中是一个不断计数的自定义线程/循环计时器。对于任何其他应用来说,作为侦听器可以在其自己的沙箱中以尽可能少的负担方式获得此计时器和其他数据的持续馈送,最好的方法是什么?

我假设必须为 IPC 实现aidl,但我不确定它是否需要和/或必要,因为来自 my.main.package 的数据只是传出的,即其他应用程序只需要接收/侦听。我知道需要进行某种形式的消息处理或可打包编组以及可能的aidl权限,但我开始认为每毫秒编码/解码一个包裹或发送一条消息会非常费力。 aidl 是唯一的方法还是有一种方法可以按照您的意图广播数据?

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

在一个新项目中,我将这些内容编译到“my.main.package”中,它运行一个服务,该服务不断处理其他客户端/应用程序可以使用的数据

服务应该只在它主动向用户提供价值时运行。用户认为创建始终运行的服务的开发人员是白痴,并使用任务杀手、设置应用程序中的强制停止等攻击他们的应用程序。

也许您的描述只是在描述您的应用程序,但“不断处理数据的服务”是一种反模式。这些是手机和平板电脑,而不是服务器。

对于任何其他应用来说,作为侦听器可以在自己的沙箱中以尽可能少的方式获取此计时器和其他数据的持续馈送,最好的方法是什么?

最好的办法是让它们一开始就不要成为单独的应用程序。

例如,在这个服务中是一个不断计数的自定义线程/循环计时器。

这不会为用户增加价值。

我假设必须为 IPC 实现aidl,但我不确定它是否需要和/或必要,因为来自 my.main.package 的数据只是传出的,即其他应用程序只需要接收/侦听。

使用 AIDL 的远程服务是进行 IPC 的一种方式。这不是唯一的方法。这甚至不是最常见的方式。您还可以:

发送广播Intent 让客户端向服务发送Messenger,服务通过Messenger向客户端发送消息 让服务更新ContentProvider,并让客户在ContentProvider 上注册ContentObserver

我知道需要进行某种形式的消息处理或可打包编组,以及可能使用aidl 的权限,但我认为每毫秒对包裹进行编码/解码或发送消息会非常费力。

一般来说,IPC“非常费力”。因此,应尽可能避免 IPC。

【讨论】:

该服务仅在需要/调用时运行,并且有一个活动来操作该服务,因此它不会 24/7 运行。我可能是 java 的新手,但我不是白痴;p 至于计时器,尽管不可思议,但对于这个项目来说,它具有重要的价值。至于我的问题,我在您的帖子之后重新检查了广播,并意识到这正是我正在寻找的,并希望它可以成为!在我之前看到的所有示例中,它们总是用于触发事件等,而不是传递原始数据类型。所以我已经实现了广播,它工作得很好!感谢您的回复!【参考方案2】:

事实上,我认为带有 AIDL 的 IPC 是满足您要求的唯一且最有效的方法。如果您需要演示,可以查看here。这是我为在 Android 上学习 AIDL 和 Binder 而编写的一个简单示例。希望它能给你一些入门的简介。

【讨论】:

您好!欢迎来到堆栈溢出!此处不赞成“仅链接”的答案,如果您可以引用链接的材料来构成您的大部分答案,那将是最好的。

以上是关于需要一些关于多应用 IPC 的指导的主要内容,如果未能解决你的问题,请参考以下文章

我需要一些关于支付网关的指导[关闭]

IPC机制总结

只需要一些关于画布上动态可拖动输入元素的指导

IPC - 管道(pipe) - 应用

IPC - 管道(pipe) - 应用

IPC - 管道(pipe) - 应用