倒计时器 vs 闹钟管理器

5

CountDownTimerAlarmManager 之间有什么主要区别吗?我不是指语法或如何使用它们,而是想知道是否存在这样的任务,当您确定可以说我应该使用其中一个而不是另一个时?
举个简单的例子,我必须每分钟启动一些操作。我应该使用 CountDownTimer 还是 AlarmManager?这取决于什么?

3个回答

2

AlarmManager通常用于当您的应用程序关闭或必须执行一些重复任务时。它也比TimerHandler略微不够精确。

CountDownTimer更多地用于在持续时间内运行特定任务(onFinish),并定期更新直到执行完毕(onTick)。

在您的特定情况下,我认为您应该使用AlarmManager,因为它可以无限重复。例如,如果您想每秒执行一次某个操作10秒钟,请使用CountDownTimer


“不太精确” - 这很有趣...但是有多不精确呢?假设我设置了一个重复的AlarmManager,每秒触发一次并增加计数器。当计数器等于3600时,它距离一小时有多接近? - Vitalii Korsakov
@VitaliiKorsakov 对不起,我没有早点看到你的评论。目前有其他任务优先处理,所以无法确切地说它有多准确。但我猜测它的时间精度应该不会低于一到两秒。 - Cat
是的,谢谢。我已经做了简单的测试。的确,我不能依赖AlarmManager的时间精度。 - Vitalii Korsakov
在我的当前应用程序中,AlarmManager的精度很好。与CountDownTimer相同。我不记得之前AlarmManager的精度非常糟糕时我是如何做的。因此,我更愿意说AlarmManger和CountDownTimer之间的差异非常微妙。这更多是一种思想上的问题,而不是实际上的问题。 - Vitalii Korsakov

2

CountDownTimer

CountDownTimer将在您的Activity上下文中运行。这意味着,如果您的应用程序不在前台,它可能随时被终止。

AlarmManager

一个完全不同的方法使用Sticky Intents,并告诉您的Receiver在一段时间后执行某些操作。它不依赖于Activity的生命周期。

因此,如果您想每分钟执行一些操作,即使您的应用程序不在前台,那么您应该使用AlarmManager,否则CountDownTimer将为您完成工作。


如果我在服务中创建CountDownTimer并关闭应用程序会怎样? - Vitalii Korsakov

0

此处所述:

注意:闹钟管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。对于正常的定时操作(滴答声、超时等),使用Handler更容易且更有效。

因此,在您的情况下最好使用CountDownTimer,因为您不希望即使应用程序关闭也执行该操作。


1
当我在服务中创建CountDownTimer时有什么区别?我已经关闭了我的应用程序,但计时器仍在工作并执行一些操作。 - Vitalii Korsakov
@VitaliiKorsakov 试着关闭设备 - 服务将被终止,但我认为闹钟管理器仍会工作。 - LeeNeverGup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接