2012-07-23 33 views
2

我想使用启动(前台)服务来管理网络连接,当用户离开应用程序很短的时间时应该保持这种连接,并且用户应该知道(这样他可以返回到应用程序,并可能断开连接)。这项服务只能在同一过程中的活动中使用。是否需要绑定到已启动的本地服务?

也许这只是因为我是Android新手,但是我发现在使用它的每个活动中都绑定到这个服务上是非常困难的 - 特别是绑定的异步性质,这对于访问来说似乎是非常必要的服务在不同的过程中。是否有任何迹象反对通过静态变量访问已启动的服务?

回答

1

也许我理解你的问题是错误的,但没有必要绑定到从Activity开始Service。相反,只需开始Service无论你需要与它进行交互。如果Service已经启动,则调用onStartCommand()。您可以在启动ServiceIntent中加入一个额外值,以区分第一个启动和后续启动。

当然 - 这解决了您不希望在您的活动和Service之间有客户端 - 服务器交互模式的用例 - 该方案需要绑定,如果您确实需要绑定,则需要绑定每个组件需要由Service提供服务。

+0

不幸的是,我不确定如何与服务进行最佳互动 - 这是我询问的一部分原因。然而,我认为绑定是有意义的,因为这些活动需要与网络连接进行交互 - 发送消息并通知聊天消息等事件。我想这个服务可以接受消息发送onStartCommand的意图,并通过广播通知应用程序广泛的事件,但这是一个更好的解决方案吗? – Medo42 2012-07-23 12:01:03

+0

那么,我已经使用了你提到的两种方法:1)如果'Activity'和'Service'之间的通信很少且稀疏,那么可以使用启动的Service然后在'onStartCommand()'中检测是否这是第一次开始或随后的“命令”。然后,您可以通过广播回到“活动”。我在这种情况下使用了这种方法,只有三个命令可以将'Activity'发送给'Service';和“返回值”是一个简单的字符串或最多两个值(一个字符串和一个int)...... – curioustechizen 2012-07-23 12:14:25

+0

... 2)如果有很多的通信,你需要传递对象,那么它是有道理的使用绑定方法。即便如此,在大多数情况下,这并不意味着您需要在所有活动中复制绑定和解除绑定的代码。例如,你可以在'onResume()'中定义一个绑定到Service的基类'Activity'类,并在'onPause()'中取消绑定。然后你可以让所有的活动继承自这个基础的'活动'。 – curioustechizen 2012-07-23 12:16:27

相关问题