我的应用每隔10分钟就会访问一个Web服务来访问数据(即使应用程序不在前台)。最好的方法是什么?
首先我需要在seaparate线程中启动我的服务吗? 以及如何让它每10分钟从服务器获得更新?有人说handler.postdelayed和一些使用Alarm Manager。哪一个更好,我们有一些例子。
答案 0 :(得分:4)
如果在您的应用程序运行时进行更新,您可以按照其他答案或较新的ScheduledThreadPoolExecutor
建议使用计时器。
如果您的应用程序即使在未运行时也会更新,您应该使用AlarmManager
:
警报管理器适用于您想要的情况 应用程序代码在特定时间运行,即使您的应用程序是 目前没有运行。
请注意,如果您计划在应用程序关闭时进行更新,则每十分钟一次是非常频繁的,因此可能有点过于耗电。
答案 1 :(得分:1)
这应该会为您提供有关该主题的最佳实践的良好介绍。
摘录:请勿使用处理程序或计时器,请使用AlarmManager和setInexactRepeating(..)
。
答案 2 :(得分:0)
您可以使用java.util.Timer或ScheduledThreadPoolExecutor(首选)安排在后台线程上定期执行操作。
以下是使用后者的示例:
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
答案 3 :(得分:0)
Timer
来完全相同的情况,它适用于我。
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, 60000, 60000);