Android wear:非常奇怪的等待周期

问题描述 投票:0回答:1

我希望我的智能手表每隔一小时振动一次,所以我创建了一个报警功能,做振动。由于经常发生安卓系统在几秒钟后才调用闹钟函数的情况,所以我解决了这个问题。

      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将正确调用函数(+-几秒,如预期),它开始等待周期。正常情况下,它的工作,但有时(随机!)循环被阻断,如果我打开显示器,它就会继续......。正如我所说,这种行为是 不可复制 (或至少,不总是)。有时有效,有时无效...

有谁知道,可能是什么问题?

谢谢卢卡

java android wait alarm
1个回答
0
投票

我有一个 "解决方案"... A 热热闹闹 一... 因为我不能在一个Thread中等待,因为我不能确定系统不会取消Thread,而且没有Thread的等待会导致阻塞显示更新,所以我写了两个不同的等待周期:第一个是在一个Thread中,如果显示为 "显示",则运行这个周期。关于 而另一个,没有线程,如果显示的是 关闭.

当然,问题是如果在第二个等待周期内显示,则什么也不会显示......

我试着在等待周期内强制刷新显示,但我没有成功。调用invalidate()也没有用... 没有显示更新。我想,invalidate()只是让系统说 "尽快重新绘制视图",但只要程序在等待周期内,系统就不会重新绘制......。也许有人知道一个在for-loop期间重绘看脸的系统?这将是 正确的 解决方案,当然...

尊敬的Luca

© www.soinside.com 2019 - 2024. All rights reserved.