Java 在单独的线程中运行服务并每10分钟唤醒一次?
我的应用程序将每隔10分钟访问一个Web服务以访问数据(即使应用程序不在前台)。最好的方法是什么 首先,我需要在seaparate线程中启动我的服务吗? 如何让它每10分钟从服务器上更新一次?有些人说handler.postdelayed,有些人使用AlarmManager。哪一个更好,我们有一些例子。您可以使用或(首选)计划在后台线程上定期执行操作 以下是使用后者的示例:Java 在单独的线程中运行服务并每10分钟唤醒一次?,java,android,multithreading,android-service,Java,Android,Multithreading,Android Service,我的应用程序将每隔10分钟访问一个Web服务以访问数据(即使应用程序不在前台)。最好的方法是什么 首先,我需要在seaparate线程中启动我的服务吗? 如何让它每10分钟从服务器上更新一次?有些人说handler.postdelayed,有些人使用AlarmManager。哪一个更好,我们有一些例子。您可以使用或(首选)计划在后台线程上定期执行操作 以下是使用后者的示例: ScheduledExecutorService scheduler = Executors.newSingleT
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);
事实上,我使用了
定时器
来处理完全相同的情况,它对我很有效
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
\\ here your todo;
}
}}, 60000, 60000);
如果更新将在应用程序运行时发生,您可以使用其他答案中建议的计时器或更新的计时器。
如果您的应用程序在未运行时仍将更新,则应使用: 报警管理器适用于您希望 应用程序代码在特定时间运行,即使您的应用程序 当前未运行
请注意,如果您计划在关闭应用程序时进行更新,则每十分钟更新一次会非常频繁,因此可能会有点太耗电。Jeffrey Sharkey在上对此主题进行了精彩的演示,请仔细观看幻灯片21 这应该能让你很好地了解这个主题的最佳实践
摘录:不要使用处理程序或计时器,使用AlarmManager和
setInexactRepeating(..)
计时器有一些缺点,ScheduledThreadPoolExecutor可以解决这些缺点。因此,它不是官方Java文档中So ScheduledExecutor上最好的choiceAlarmManager,举个例子:当心,