我使用带有多个片段的ActionBar标签。每个片段包含一个基于我的计时器服务的计时器。当我停止第一个计时器(停止计时器服务)时,第二个计时器也会停止,我猜这是因为他们正在运行相同的服务。
如果另一个片段正在使用该服务,或者可能为每个计时器启动单独服务,是否可以解除?还是有另一种方式吗?
我一直在寻找一段时间的解决方案,我现在有点迷失。
答案 0 :(得分:0)
如果没有看到您的代码:对方法startService
的调用将在未运行时启动服务,或者如果服务已启动则调用onStartCommand
。当计时器启动时,您可以调用startService
并增加一个值(例如表示实时计时器的int
值)。当计时器需要停止/结束时,你可以在BroadcastReceiver
中实现Service
(就像在你显示的链接中一样)来监听来自其他组件的“近距离”广播(你可以使用)这个模式让Service
知道新的计时器已经启动(“开始”广播)。
在来自BroadcastReceiver
的{{1}}中,您将减少实时计时器的数量,看看您是否在Service
,如果是这种情况,请停止0
。
上述方法的主要问题是何时可靠地关闭Service
,即使其他活动被杀死也没有重新启动,因此他们无法广播所需的计时器关闭意图(如果其他活动被杀死)并且没有重新启动服务可能会留下一些注册的计时器,你不希望服务无限期地运行)。要解决此问题,需要有关实际代码的更多详细信息。