Android服务与多个活动进行交互

时间:2010-06-29 14:29:04

标签: android service android-activity android-service

我正在尝试重构/重新设计Android应用。目前,我有一个创建Activity 1的UI活动(DataThread)。该线程负责网络I / O,并通过handler与UI活动进行交互(提供数据)。

现在,我想添加另一项活动(带视频的新UI屏幕) - Activity 2Activity 1仍然是主要活动。当用户点击Activity 2上的按钮时,系统会调用Activity 1Activity 2的数据也来自DataThread

我的想法是将我的DataThread的逻辑放在Android ServiceDataService)中。我的问题是 - 可以同时将活动绑定多于我的DataService吗?有没有办法告诉服务只为特定活动提供数据?

欢迎任何其他想法?

提前致谢。

2 个答案:

答案 0 :(得分:6)

肯定有多个活动可以绑定到您的服务。你会得到一个绑定的onBind()。然后,您的服务将理想地处理与多个活动交互的逻辑,方法是使用服务中的onBind()使用ID或意图(将每个活动的ID作为额外内容)识别它们。然后,您可以让服务从绑定到它的每个活动的后台线程中生成。

答案 1 :(得分:4)

我通常从Application类绑定我的服务,并且在应用程序中处理服务之间的通信,并且有某种类型的控制器类(就像我认为的“调解器”...不确定所有这些模式是如何命名的)活动的活动是。

这将涉及编写您自己的Application类并告诉Manifest使用此类。我在前一个帖子中详细介绍了这个过程:

More efficient way of updating UI from Service than intents?

您可以通过在onResume中向Application类发送对自身的引用来跟踪“当前活动”活动(也在上面的示例中进行了解释)。这可以通过从公共基类派生您的活动来实现,该公共基类具有获取Application类的方法(从getApplicationContext转换),并在此基类'onResume中,将自身的ref发送给应用程序。然后,您可以使用您的DataServiceController按名称注册活动,并仅在向Controller注册接收它们时才将消息发送到当前活动。