【发布时间】:2010-06-24 23:34:20
【问题描述】:
在 Google I/O 期间的 Virgil Dobjanschi talk 中,他提到使用 Services 进行提取,然后在完成时使用回调通知 Activity。他从未详细说明如何实现此回调,而且我似乎在任何地方都找不到有关此主题的任何有用信息。
我想他说你根本不需要实现绑定?
有什么线索吗?
【问题讨论】:
标签: android
在 Google I/O 期间的 Virgil Dobjanschi talk 中,他提到使用 Services 进行提取,然后在完成时使用回调通知 Activity。他从未详细说明如何实现此回调,而且我似乎在任何地方都找不到有关此主题的任何有用信息。
我想他说你根本不需要实现绑定?
有什么线索吗?
【问题讨论】:
标签: android
选项#1:Service 发送一个广播Intent,Activity 通过BroadcastReceiver 捕获,该BroadcastReceiver 通过registerReceiver() 注册。
选项#2:如果Activity 绑定到Service,让Activity 将侦听器传递给Service,当工作完成时Service 会调用该侦听器。
选项#3:Service 没有多大作用,但是当数据发生变化时,ContentProvider 会调用notifyChange(),这可能会波回到数据上的Activity 和/或其Cursor .
选项#4:应该避免的单例。
...
选项 #237:Service 通过 FedEx 向Activity 发送一封信。 :-)
...
话虽如此,一旦他们将 Twitter 应用程序作为开源发布,你就会确定 Twitter 应用程序的功能。
【讨论】:
ResultReceiver。坦率地说,我对这个选择感到震惊,因为ResultReceiver 使用 AIDL,并且由于开销问题,我们一再被告知不要将其用于本地操作。也许ResultReceiver 有一些我不知道的特别之处。
ResultReceiver 的担心是没有根据的。有关更多信息,请参阅此主题:groups.google.com/group/android-developers/browse_thread/thread/…
查看Google I/O 2010 app. 它使用了他所指的模式。它使用 CommonsWare 答案中的选项 #2。
【讨论】:
我认为他们正在谈论使用 AIDL 在活动和服务之间进行通信...
【讨论】: