闹钟管理器
闹钟管理器在执行闹钟接收器的onReceive()
方法时会持有CPU唤醒锁。这可以确保手机在处理广播之前不会休眠。一旦onReceive()
方法返回,闹钟管理器就会释放此唤醒锁。这意味着,有些情况下,当你的onReceive()
方法完成后,手机将立即进入睡眠状态。如果你的闹钟接收器调用了Context.startService()
,那么在请求的服务启动之前,手机可能会休眠。为了防止这种情况发生,你的BroadcastReceiver
和服务需要实现独立的唤醒锁策略,以确保手机在服务可用之前继续运行。
ScheduledThreadPoolExecutor.
您可以使用java.util.Timer或ScheduledThreadPoolExecutor
(推荐)在后台线程上定期安排操作。
以下是使用后者的示例:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
}
}, 0, 10, TimeUnit.MINUTES);
所以我更喜欢ScheduledExecutorService。
但是如果在应用程序运行时发生更新,可以使用Timer,如其他答案中建议的,或者更新的ScheduledThreadPoolExecutor。 如果您的应用程序即使在不运行时也会更新,则应选择AlarmManager。
AlarmManager旨在用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。
请注意,如果您计划在应用程序关闭时进行更新,则每十分钟一次可能太频繁,从而可能消耗过多电量。
还请查看此帖子。