我正在尝试重构/重新设计Android应用。目前,我有一个创建Activity 1
的UI活动(DataThread
)。该线程负责网络I / O,并通过handler
与UI活动进行交互(提供数据)。
现在,我想添加另一项活动(带视频的新UI屏幕) - Activity 2
。 Activity 1
仍然是主要活动。当用户点击Activity 2
上的按钮时,系统会调用Activity 1
。 Activity 2
的数据也来自DataThread
。
我的想法是将我的DataThread
的逻辑放在Android Service
(DataService
)中。我的问题是 - 可以同时将活动绑定多于我的DataService
吗?有没有办法告诉服务只为特定活动提供数据?
欢迎任何其他想法?
提前致谢。
答案 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注册接收它们时才将消息发送到当前活动。