我不确定,但据我所知,我同意我的看法。如果我错了,我总是接受最好的答案。
报警经理
警报管理器保持CPU唤醒锁,只要警报接收器的锁onReceive()方法正在执行。这保证了在你处理完广播后手机不会睡觉。一次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.警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前没有运行。
请注意,如果您计划在关闭应用程序时进行更新,则每十分钟更新一次是非常频繁的,因此可能会太耗电。