【问题标题】:CountDownTimer vs AlarmManagerCountDownTimer 与 AlarmManager
【发布时间】:2012-10-10 19:40:09
【问题描述】:

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

【问题讨论】:

    标签: android alarmmanager countdowntimer


    【解决方案1】:

    AlarmManager 通常用于您的应用程序已关闭或必须execute some repeating task(s) 的用途。它也比TimerHandler 的精确度稍差。

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

    在您的具体情况下,我相信您应该使用AlarmManager,因为它可以无限重复。例如,如果您希望每秒执行 10 秒,请使用 CountDownTimer

    【讨论】:

    • “不那么精确”——这很有趣……但少了多少?假设,我设置重复 AlarmManager 每秒触发一次并增加计数器。当计数器等于 3600 时,距离一小时有多近?
    • @VitaliiKorsakov 对不起,我没有早点看到你的评论。不可能确切地说它有多准确,但其他任务优先于它。我怀疑随着时间的推移,它的准确度不会低于一两秒。
    • 是的,谢谢。我已经做了简单的测试。事实上,我不能依赖 AlarmManager 的时间精度。
    • 在我当前的应用程序中,AlarmManager 的精度还可以。与倒计时相同。我不记得以前当 AlarmManager 的精度很差时我是怎么做的。所以,我宁愿说 AlarmManger 和 CountDownTimer 之间的区别非常微妙。这更像是意识形态问题而不是实际问题。
    【解决方案2】:

    CountDownTimer

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

    AlarmManager

    一种完全不同的方法使用粘性意图。并在一段时间后告诉你的Receiver。它不依赖于Activity的生命周期。

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

    【讨论】:

    • 如果我在服务中创建 CountDownTimer 并关闭应用程序会怎样?
    【解决方案3】:

    here 所述:

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

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

    【讨论】:

    • 在服务中创建 CountDownTimer 有什么区别?我已经关闭了我的应用程序,计时器仍在工作并执行一些操作。
    • @VitaliiKorsakov 尝试关闭设备 - 服务将被终止,但我认为警报管理器会起作用。
    猜你喜欢
    • 2013-07-30
    • 2013-12-13
    • 2017-10-09
    • 1970-01-01
    • 2012-11-08
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多