2012-08-10 73 views
0

我使用具有多个片段的ActionBar选项卡。每个片段包含一个基于我的计时器服务的计时器。当我停止我的第一个计时器(停止计时器服务)时,第二个计时器也停止,我猜这是因为他们正在运行相同的服务。使用相同服务的多个定时器

是否可以区分是否有其他片段正在使用该服务,或者可能为每个定时器启动单个服务?还是有另一种方式呢?

我一直在寻找一段时间的解决方案,现在我有点迷路了。

+0

你是什么意思“计时器”?你的意思是Java的Timer类还是一些通用的功能,可以充当定时器? – DeeV 2012-08-10 12:20:32

+1

服务只能有一个实例。您无法启动同一服务的多个实例。定时器是否只在活动使用时需要,或者在后台需要吗? – 2012-08-10 12:22:06

+0

@DeeV该服务使用一个广播服务和一个可运行的消息,通知我的消费者每秒更新ui。通过这种方式,即使手机未被使用(onPause释放bradcastservice),我也可以让我的定时器运行。 – aelveborn 2012-08-10 12:28:05

回答

0

未看到您的代码:拨打方法startService的呼叫将在服务未运行时启动服务,如果服务已启动,则呼叫onStartCommand。当定时器启动时,您可以调用startService并增加一个值(例如代表实时定时器的int值)。当一个定时器需要停止/结束时,你可以在Service(如你所显示的链接)中实现一个BroadcastReceiver来监听来自其他组件的“关闭”广播(你可以使用这种模式让Service知道一个新的定时器已经开始(“开始”广播))。

在这种BroadcastReceiverService你会递减现场定时器计数,看看你在0,如果是这样,则情况下停止Service

上述方法的主要问题是何时可靠地关闭Service即使其他活动被杀死并且没有重新启动,因此它们不能广播所需的计时器关闭意图(如果其他活动被杀害,并且不是重新启动服务可能会留下一些注册的计时器,并且您不希望该服务无限期运行)。要解决这个问题,需要更多关于你的实际代码的细节。

+0

嗨,谢谢你的回答,我已经像上面说的那样实现了它。如果我按下后退按钮,我确实遇到了服务仍在运行的问题。明天我会更新一些代码。 – aelveborn 2012-08-11 02:31:10

相关问题