我回答了一个类似的问题here。在这个答案中,有一个链接到标记brady在柏林的droidconf上的演示文稿。在他的slides中,他描述了一个管理这类事情的框架。他还在github上提供了这方面的资料。
他提出了以下解决方案。构建一个存在于自定义应用程序类范围内的控制器对象。控制器启动服务或简单的工作线程,并通知UI服务是否通知某些内容发生了变化。如果不是绝对必要,他建议不要使用AIDL。
android文档还提供了关于如何启动本地进程的example。
有许多方法可以在活动和服务之间建立连接并在它们之间共享数据。您可以使用以下解决方案进行沟通:
- 意图。您可以发送(通过sendBroadcast (Intent intent)并接收(通过BroadcastReceiver)意图。示例方案:您的活动在启动时发送广播“GIVE_ME_ALL_DATA”,服务发送响应。如果服务有新数据,它还广播“HEY_I_HAVE_NEW_DATA”。
- 的ContentProvider。服务和活动从中并行读写。您可以将观察者附加到特定的数据网址,以便每个监听器都会收到有关更改的通知。如果使用CursorAdapter将数据绑定到ui组件,则用户界面将自动更新。
- AIDL。这是一个android'a IPC。您可以为要向客户端公开的服务定义接口。开始时的客户端:建立与服务的连接,请求数据,注册回叫。如果服务有新数据,它会调用客户端注册的回调。