我希望我的智能手表每隔一小时振动一次,所以我创建了一个报警功能,做振动。由于经常发生安卓系统在几秒钟后才调用闹钟函数的情况,所以我解决了这个问题。
final Thread t = new Thread()
{
@Override
public void run()
{
Calendar cal = Calendar.getInstance();
try
{
Log.d(PROGRAM, "Waiting until next full minute");
cal.setTimeInMillis(getCurrentTimeMillis());
while(cal.get(Calendar.SECOND) >= (60 - (HOURY_CHIME_CORRECTION / 1000)))
{
TimeUnit.SECONDS.sleep(1);
cal.setTimeInMillis(getCurrentTimeMillis());
}
hourlyChime();
}
catch(Exception e)
{
Log.i(PROGRAM, "Exception:\n" + e);
}
alarmManager.cancel(hourlyChimePendingIntent);
alarmManager.setExact(
AlarmManager.RTC_WAKEUP,
getNextHourMS(),
hourlyChimePendingIntent);
}
};
t.start();
HOURLY_CHIME_CORRECTION目前是10秒,而闹钟是在整点前10秒(HOURLY_CHIME_CORRECTION)设置的。
现在的问题是:我看到用ADB将正确调用函数(+-几秒,如预期),它开始等待周期。正常情况下,它的工作,但有时(随机!)循环被阻断,如果我打开显示器,它就会继续......。正如我所说,这种行为是 不可复制 (或至少,不总是)。有时有效,有时无效...
有谁知道,可能是什么问题?
谢谢卢卡
我有一个 "解决方案"... A 热热闹闹 一... 因为我不能在一个Thread中等待,因为我不能确定系统不会取消Thread,而且没有Thread的等待会导致阻塞显示更新,所以我写了两个不同的等待周期:第一个是在一个Thread中,如果显示为 "显示",则运行这个周期。关于 而另一个,没有线程,如果显示的是 关闭.
当然,问题是如果在第二个等待周期内显示,则什么也不会显示......
我试着在等待周期内强制刷新显示,但我没有成功。调用invalidate()也没有用... 没有显示更新。我想,invalidate()只是让系统说 "尽快重新绘制视图",但只要程序在等待周期内,系统就不会重新绘制......。也许有人知道一个在for-loop期间重绘看脸的系统?这将是 正确的 解决方案,当然...
尊敬的Luca