繁体   English   中英

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

[英]How do I use Android's Handler.PostDelayed to make an event happen at a specified time?

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

我想要做:

    Date now = new Date();

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

在日志中,我可以看到添加了4声哔声,但是它们从未触发。 我假设它与uptimeMillis有关 ,但是我不确定该怎么做。

您将必须获取now和beep.gettime()之间的区别,并将其传递给postattime函数。 由于正常运行时间是基础,因此如果手机进入深度睡眠状态,则可能不准确。

beep.gettime-现在+ SystemCLock.uptimeMillis()

应该传递给postattime函数

您当前传递的数字非常大,等于1970年1月1日的当前毫秒数。

您可以使用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可以。 如果我错了,请随时纠正我!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM