我不确定,但是据我所知我同意我的观点。如果我错了,我总是接受最佳答案。
警报管理器
只要警报接收器的onReceive()
方法正在执行,警报管理器就会保持CPU唤醒锁。这样可以确保手机在完成广播处理之前不会进入睡眠状态。一旦onReceive()
返回,警报管理器将释放此唤醒锁。这意味着在您的onReceive()
方法完成后,手机在某些情况下会进入睡眠状态。如果您的警报接收器叫Context.startService()
,则电话可能会在启动请求的服务之前进入睡眠状态。为防止这种情况,您BroadcastReceiver
和您Service
将需要实施单独的唤醒锁定策略,以确保手机继续运行,直到该服务可用为止。
注意:警报管理器适用于希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。对于正常的计时操作(滴答声,超时等),使用Handler会更容易且效率更高。
计时器
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(1));
Timer
有一些可以解决的缺点ScheduledThreadPoolExecutor
。所以这不是最好的选择
ScheduledThreadPoolExecutor。
您可以使用java.util.Timer
或ScheduledThreadPoolExecutor
(首选)将操作安排在后台线程上定期执行。
这是使用后者的示例:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
所以我更喜欢 ScheduledExecutorService
但也要考虑一下,如果更新将在应用程序运行时进行,则可以使用Timer
其他答案中建议的或较新的ScheduledThreadPoolExecutor
。如果您的应用程序即使没有运行也会更新,则应使用AlarmManager
。
警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。
请注意,如果您计划在关闭应用程序时进行更新,则十分频繁,每十分钟一次,因此可能会有点耗电。