2010-06-29 105 views
10

我正试图重构/重新设计一个Android应用程序。目前,我有一个UI活动(Activity 1),它创建了一个DataThread。此线程负责网络I/O并通过handler与UI活动交互(提供数据)。Android服务与多个活动交互

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

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

欢迎任何其他想法?

在此先感谢。

回答

4

我通常将我的服务绑定到Application类,并且在处理服务之间的通信的应用程序中拥有某种控制器类(例如,我猜...不知道如何命名所有这些模式)无论活动的活动是什么。

这将涉及编写您自己的应用程序类并告诉Manifest使用此类。我走进更详细的关于这个过程在以前的线程:

More efficient way of updating UI from Service than intents?

您可以通过在的onResume发送应用程序类的引用本身(在本例中还解释跟踪“当前活动”活动以上)。这可以通过从一个公共基类中派生你的活动来完成,该基类有一个获取你的应用类的方法(从getApplicationContext转换),并且在这个基类的onResume中发送一个自己的ref给应用。然后,例如,您可以通过DataServiceController的名称注册活动,并且只有在向Controller注册以接收它们时,才会将消息发送到当前活动。

+0

我正在寻找这样的解决方案,有没有任何工作的例子或链接,以获得有关此实施的更多细节,thx – Sam 2011-06-23 06:54:59

+7

@Rich当您的应用程序终止时,如何绑定它,您如何设法从服务中干净地解除绑定在你的应用程序类?由于Application#onTerminate()永远不会在生产设备上调用,请参阅JavaDoc http://developer.android.com/reference/android/app/Application.html – 2012-02-20 18:23:17

+0

@SvenJacobs我能想到的唯一方法是:让服务调用' stopSelf()'在一段时间后,所有活动都暂停。在这种情况下,活动必须在服务暂停时告诉服务他们的状态。活动永远不会调用'unbindService()',并且服务在每个Activity的每个onResume()上绑定到'applicationContext'。 – OneWorld 2013-07-04 14:48:09

6

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

+3

@JoakimEngstrom为什么你不编辑它,所以它更清楚? – SMT 2014-10-30 19:03:43