需要一些多应用IPC的指导

时间:2012-02-04 13:09:54

标签: java android ipc

我真正想要的只是一点指导。我正在尝试创建我的第一个官方Android应用程序。我是java / droid的新手但不是编程。在过去的一个月里,我创造了许多小实验活动,服务,线程等等,它们都按计划运行。所以现在我试图把所有人联系在一起,但没有太多运气。

在一个新项目中,我将内核编译成'my.main.package',它运行的服务不断处理其他客户端/应用程序可以使用的数据......这就是我的计划。例如,在此服务中是一个不断计数的自定义线程/循环计时器。什么是其他任何应用程序获得此计时器和其他数据的最佳方式,作为一个监听器可以在自己的沙箱中以尽可能最少的方式获得?

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

  

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

服务只应在积极向用户提供时运行。用户认为创建一直运行的服务的开发人员都是白痴并使用任务杀手攻击他们的应用程序,从“设置”应用程序强制停止等等。

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

  

对于任何其他应用程序来说,获取此计时器和其他数据的最佳方式是什么?作为监听器可以在其自己的沙箱中以尽可能最少的方式获取?

最好的方法是让他们不要首先成为单独的应用程序。

  

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

这不会为用户增加价值。

  

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

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

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

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

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

答案 1 :(得分:0)

事实上,带有AIDL的IPC是唯一的&我认为,这是满足您要求的最有效方式。如果您需要一个演示,可以查看here。这是我写的一个简单的例子来学习AIDL& Android上的Binder。希望它可以为你提供一些简要的启动。