报警管理器
只要警报接收器的onReceive()
方法正在执行,警报管理器就会持有 CPU 唤醒锁。这保证了在您完成广播处理之前手机不会休眠。一旦onReceive()
返回,警报管理器就会释放这个唤醒锁。这意味着在某些情况下,只要您的onReceive()
方法完成,手机就会进入睡眠状态。如果您的警报接收器呼叫Context.startService()
,则手机可能会在请求的服务启动之前进入休眠状态。为防止这种情况发生,您BroadcastReceiver
和服务将需要实施单独的唤醒锁定策略,以确保手机继续运行直到服务可用。
调度线程池执行器。
您可以使用java.util.Timer or ScheduledThreadPoolExecutor
(首选)安排在后台线程上定期发生的操作。
这是使用后者的示例:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
所以我更喜欢 ScheduledExecutorService
但是,如果更新将在您的应用程序运行时发生,您可以使用计时器,如其他答案中所建议的那样,或者更新的 ScheduledThreadPoolExecutor。如果您的应用程序即使在未运行时也会更新,您应该使用 AlarmManager。
警报管理器适用于您希望应用程序代码在特定时间运行的情况,即使您的应用程序当前没有运行。
请注意,如果您计划在应用程序关闭时更新,则每十分钟一次是非常频繁的,因此可能有点太耗电了。
也看看这篇文章。