如何最好地实现共享一项服务的两项活动(w。蓝牙连接)?

时间:2011-08-17 21:59:26

标签: android service

现在主要的Activity(Act.A)启动一个保存蓝牙连接的服务。 (它绑定服务)

该服务是BluetoothChatService的修改版本(Android BluetoothChat示例)... ...根据MessengerService(Android Remote Messenger示例)

添加了Messenger和Handler进行修改

活动A确保蓝牙连接到外部设备,然后开始另一项活动(行动B)。

问题是让服务继续运行并顺利地为新活动提供蓝牙连接。我不知道如何:

  • 确保服务未从活动A切换到B

  • 时重新启动或重新安装
  • 确保消息传递功能符合要求(来自当前活动的活动)

我是否需要将服务重新绑定到新活动,以及如何确保BT连接不会丢失(由于其他服务实例)? 或者我是否需要将Messenger对象传递给新活动以与alread实例化的Service进行通信。如果是这样,我该如何做到最好?

非常感谢答案!

3 个答案:

答案 0 :(得分:6)

使服务“粘滞”,以便它继续运行。并为您的2个活动创建一个基本Activity类。基本Activity类可以处理与服务绑定的所有常见功能,并提供正确的通信。我肯定会建议在活动暂停时取消绑定您的服务,并在活动恢复时重新绑定它们。但是这可以在公共基类活动中完成一次。

绑定到服务只应在它尚未运行时启动它,如果你在Resume / Pause中绑定/取消绑定,那么在任何给定时间你应该只有一个活动连接到该服务。

答案 1 :(得分:1)

你要么子类Application并在那里存储信息(参见here),要么你可以让你的“服务”成为单身,所以它有一个你自己类型的静态成员只能初始化如果它是空的。

答案 2 :(得分:1)

这是一个老问题,但我今天遇到了这种情况,并提出了一个基于其他响应的解决方案。由于我找不到可行的实施方案,我会将其发布给可能很好奇的其他人。我创建了一个“粘性服务”,然后创建了一个ServiceManager类,负责管理服务的生命周期和绑定。然后我将ServiceManager类放入Application的子类中,以便Activities可以作为范围全局访问它。它运作良好。来源可在GitHub上找到。