我制作了一个简单的计时器应用程序,每秒更新一次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,即使屏幕关闭也是如此?
答案 0 :(得分:2)
问题在于,当我这样做时(通过短按电源按钮),定时器循环似乎进入慢动作。我每隔20-25秒就会发出一声哔哔声。
你甚至得到这个的唯一原因是因为其他东西导致设备每20-25秒重新启动一次。在屏幕变暗后不久,CPU关机,您的应用程序将不再运行。
因此,当屏幕关闭时,postAtTime似乎不起作用。
postAtTime()
效果非常好。该设备只是处于睡眠模式。
有谁知道为什么
因为设备处于睡眠模式。
即使屏幕关闭,如何在指定的时间触发postAtTime?
停止设备进入睡眠模式,例如通过android:keepScreenOn
。