以下参数是什么:
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);
以下内容:
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
有什么区别,两者在功能方面有何不同?
答案 0 :(得分:33)
两个示例都安排了一个重复警报,该警报将发送给定的alarmIntent
。在这两种情况下,第一次发送时都会立即发送(calendar.getTimeInMillis()
返回the current time)。在这两种情况下,当需要发送警报时,设备将被唤醒(AlarmManager.RTC_WAKEUP
显示)。
这些电话之间有两个不同之处。更简单的是,意图将在第一次呼叫时每十五分钟发送一次,而在第二次呼叫时每天发送一次(正如您在第三个参数中看到的那样)。更复杂的区别是函数调用本身:setRepeating
将每15分钟安排完全的第一个警报; setInexactRepeating
会每24小时为大约安排第二次警报,这意味着它可能会偏离该间隔 - 具有消耗更少电量的优势。
请注意,这在API 19中发生了变化,其中这两个调用是同义词。请参阅this guide和this API documentation。
答案 1 :(得分:15)
确定警报需要的准确程度
选择警报类型通常是创建警报的第一步。另一个区别是你需要警报的准确程度。
对于大多数应用来说, setInexactRepeating()
是正确的选择。当您使用此方法时, Android会同步多个不准确的重复警报并同时触发它们。这样可以减少电池的消耗。
对于具有严格时间要求的罕见应用程序,警报需要在下午4点触发精确。然后每天使用 setRepeating()
。
答案 2 :(得分:9)
为了增加以前的答案,在使用重复警报时需要考虑许多其他最佳做法,尤其是使用setInexactRepeating()
请求的不准确警报。
警报类型
<强>时基强>
dumpsys alarm
adb shell
安排了哪些闹钟
<强>间隔强>
编辑:这里有关于姜饼和蜂窝3.0设备的错误的进一步说明:https://code.google.com/p/android/issues/detail?id=31550
答案 3 :(得分:3)
setRepeating更准确和 setInexactRepeating用于节省电池但没有准确,例如setInexactRepeating适用于后台维护,例如闹钟时需要setRepeating。
答案 4 :(得分:0)
Use setInexactRepeating()用于不认真使用应用程序(例如在清晨醒来)时使用。如果警报大约在该时间醒来,则没有生命危险。 例如药丸应用程序,其中高度危急的患者使用该应用程序来提醒护士或医生人员必须使用setRepeating()。 当您使用setInexactRepeating() 然后Android会同步来自多个应用程序的重复警报,并同时触发一次。这减少了系统必须唤醒设备的总次数。 从而减少电池的电量消耗。 重复警报是不准确的。请注意,尽管setInexactRepeating()是对setRepeating()的改进, 如果每个应用实例都在同一时间访问服务器,它仍然可能使服务器不堪重负。因此,对于网络请求,请为警报添加一些随机性。