我开发了一个需要每10分钟更新一次的App Widget . 在关于App Widgets的Android文档中,指定如果窗口小部件需要更频繁地每小时更新一次,建议使用AlarmManager并将警报类型设置为RTC或ELAPSED_REALTIME,以便仅在设备是苏醒 .
我已经实现了AlarmManager,我的小部件每10分钟正确更新一次 . 经过多次测试,同时使用RTC和ELAPSED_REALTIME报警类型,我看到我的小部件在设备进入休眠状态后仍在更新 . 我可以在LogCat中看到我的小部件即使在30分钟后设备进入休眠状态(屏幕关闭后30分钟)也会更新 .
我的问题是,如果警报仍然传递,并且我的小部件每10分钟更新一次,即使在设备进入睡眠状态后如何使用带有RTC或ELAPSED_REALTIME的AlarmManager,因为文档说更多的电池效率比仅为updatePeriodMillis属性设置600,000毫秒在我的小部件提供程序xml文件?
1 回答
有几件事:
RTC和ELAPSE_REAL_TIME都有WAKEUP和非WAKEUP版本,因此如果您不希望在手机休眠时更新小部件,则可以选择非WAKEUP版本 . 如果设置
updatePeriodMillis
,它将以任一方式唤醒设备 .当您使用
setInexactRepeating()
而不是setRepeating()
设置闹钟时,Android会捆绑多个不准确的闹钟并同时触发它们,这样可以提高电池效率 . 另外根据doc:所以如果你需要每10分钟更新一次,它可能对你没用 .