在本地服务与线程和活动之间同步

时间:2010-06-01 07:05:15

标签: android multithreading service

2 个答案:

答案 0 :(得分:5)

我回答了一个类似的问题here。在这个答案中,有一个链接到标记brady在柏林的droidconf上的演示文稿。在他的slides中,他描述了一个管理这类事情的框架。他还在github上提供了这方面的资料。

他提出了以下解决方案。构建一个存在于自定义应用程序类范围内的控制器对象。控制器启动服务或简单的工作线程,并通知UI服务是否通知某些内容发生了变化。如果不是绝对必要,他建议不要使用AIDL。

android文档还提供了关于如何启动本地进程的example

答案 1 :(得分:3)

有许多方法可以在活动和服务之间建立连接并在它们之间共享数据。您可以使用以下解决方案进行沟通:

  • 意图。您可以发送(通过sendBroadcast (Intent intent)并接收(通过BroadcastReceiver)意图。示例方案:您的活动在启动时发送广播“GIVE_ME_ALL_DATA”,服务发送响应。如果服务有新数据,它还广播“HEY_I_HAVE_NEW_DATA”。
  • 的ContentProvider。服务和活动从中并行读写。您可以将观察者附加到特定的数据网址,以便每个监听器都会收到有关更改的通知。如果使用CursorAdapter将数据绑定到ui组件,则用户界面将自动更新。
  • AIDL。这是一个android'a IPC。您可以为要向客户端公开的服务定义接口。开始时的客户端:建立与服务的连接,请求数据,注册回叫。如果服务有新数据,它会调用客户端注册的回调。