如何使用Android的Handler.PostDelayed在指定时间发生事件?

时间:2012-01-06 21:11:28

标签: java android

我想让我的应用程序在将来执行代码。

我想这样做:

    Date now = new Date();

    for (Date beep : scheduledBeeps) {
        if (beep.after(now))
        {
            Logger.i("adding beep");
            m_beepTimer.postAtTime(beepNow, beep.getTime());
        }
    }

在日志中,我可以看到添加了4声嘟嘟声,但它们从不会发射。我假设它与uptimeMillis有关,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

你必须得到now和beep.gettime()之间的区别,并将它传递给postattime函数。由于正常运行时间用作基准,如果手机进入深度睡眠状态可能不准确。

  

beep.gettime - now + SystemCLock.uptimeMillis()

应该传递给postattime函数

您目前正在传递相当于1970年1月1日当前毫秒数的非常大的数字。

答案 1 :(得分:0)

您可以使用Calendar类设置某个特定时间点。

Calendar beepTime = Calendar.getInstance();

beepTime.set(Calendar.DAY_OF_MONTH, 2);
beepTIme.set(Calendar.HOUR_OF_DAY, 01);
beepTime.set(Calendar.MINUTE, 55);
beepTime.set(Calendar.SECOND, 00);

getInstance会将其设置为当前时间,您可以更改任何您喜欢的变量,例如上面的变量。例如,这将在当月2日的1:55创建时间。然后,您可以将此设置为

的时间
beepTime.getTimeInMillis()

将其弹出到你的postAtTime方法

编辑:我对你的问题肯定不够了解,但是使用AlarmManager可能会更好。我知道即使程序没有运行,它仍然有效,而我认为PostDelayed不会。如果我错了,请随意纠正我!