为什么在屏幕关闭时,postAtTime不会在正确的时间触发

时间:2012-03-03 18:56:17

标签: android timer screen delay

我制作了一个简单的计时器应用程序,每秒更新一次textview。 我希望它每隔10秒发出一次哔哔声,总持续时间为100秒。 基本上这就是我制作它的方式(非常示意图):

static long second, ticker, uptimemilli;
onCreate() {
  second = ticker = 0;
  Handler mHandler = new Handler();
  uptimemilli = SystemClock.uptimeMillis();
  mHandler.postAtTime(mUpdateTimeTask, uptimemilli+1000*ticker++);
}

private Runnable mUpdateTimeTask = new Runnable() {
  public void run() {
    if (second == 100)
      return;
    UpdateMyTextView(second++);
    if (second%10 == 0)
      PlayBeep();
    mHandler.postAtTime(mUpdateTimeTask, uptimemilli+1000*ticker++);
  }
};

手机显示屏开启时效果很好。 TextView每秒更新一次,每隔10秒发出一声蜂鸣声。但是,即使我关闭显示器,我希望应用程序每隔10秒发出一次哔声。问题是,当我这样做时(通过短按电源按钮),定时器循环似乎进入慢动作。我每20-25秒就会发出一声哔哔声。因此,当屏幕关闭时,postAtTime似乎不起作用。有人知道为什么以及如何在我指定的时间触发postAtTime,即使屏幕关闭也是如此?

1 个答案:

答案 0 :(得分:2)

  

问题在于,当我这样做时(通过短按电源按钮),定时器循环似乎进入慢动作。我每隔20-25秒就会发出一声哔哔声。

你甚至得到这个的唯一原因是因为其他东西导致设备每20-25秒重新启动一次。在屏幕变暗后不久,CPU关机,您的应用程序将不再运行。

  

因此,当屏幕关闭时,postAtTime似乎不起作用。

postAtTime()效果非常好。该设备只是处于睡眠模式。

  

有谁知道为什么

因为设备处于睡眠模式。

  

即使屏幕关闭,如何在指定的时间触发postAtTime?

停止设备进入睡眠模式,例如通过android:keepScreenOn