对于setAlarm()参数:我应该使用SystemClock.elapsedRealtime(),calander,getTimemillise还是其他东西?
因为警报会很好,但是当我手动转到Android手机的日期和时间设置并更改时间(不是过去,而是将来的时间)时,警报就不会出现并立即触发。
答案 0 :(得分:0)
这是官方Alarm Manager 文档中为所有设置方法指定的预期行为。
如果指定的触发时间已过去,警报将立即触发。
要进行管理,您可以尝试在接收器中以过去的触发时间取消此类警报。
如何选择 System.currentTimeMillis() vs SystemClock.elapsedRealtime()
该链接指定了:-
第一种方法将为您提供标准的“挂墙”时钟(时间和日期),以毫秒为单位,并且受设置中时间和日期的影响以及更改。
使用第二种方法时,返回自系统启动以来的时间(以毫秒为单位),包括睡眠时间。因此不会受到设置更改的影响,因此它是通用间隔定时的推荐基础。
因此,如果您不希望时间取决于时区变化,则最好使用第二种方法,否则您需要按照前面提到的方法进行处理。
与其他替代方法(例如Date或Calender)相比,由于具有性能优势,因此最好使用currentTimeMillis()。