Java 如何利用定时器为工作服务?
我有以下任务:使服务每10分钟执行一次并从互联网上获取数据。我尝试使用组合服务+计时器,但在这种情况下,我无法控制服务(我在服务的onCreate()方法中延迟执行TimerTask,当我中断服务时,TimerTask不会停止)。我只需要2个按钮:“开始服务”和“停止服务”。在这种情况下,最好的方法是什么?谢谢你的帮助 如果我很了解你,你想知道当你中断服务时如何停止计时器任务吗?! 如果是,请继续阅读,否则请更好地解释 要停止TimerTask再次执行(假设它被安排重复运行),必须调用cancel()方法。首选的方法是让TimerTask本身在检查一些可以在外部设置的布尔标志后调用cancel()方法 例如:Java 如何利用定时器为工作服务?,java,android,Java,Android,我有以下任务:使服务每10分钟执行一次并从互联网上获取数据。我尝试使用组合服务+计时器,但在这种情况下,我无法控制服务(我在服务的onCreate()方法中延迟执行TimerTask,当我中断服务时,TimerTask不会停止)。我只需要2个按钮:“开始服务”和“停止服务”。在这种情况下,最好的方法是什么?谢谢你的帮助 如果我很了解你,你想知道当你中断服务时如何停止计时器任务吗?! 如果是,请继续阅读,否则请更好地解释 要停止TimerTask再次执行(假设它被安排重复运行),必须调用cance
class MyTimerTask extends TimerTask() {
private boolean alive = true;
public void run() {
if (alive) {
// do something
} else {
cancel();
}
}
public void stop() {
alive = false;
}
}
然后,很明显,当您中断服务时,只需调用MyTimerTask.stop()。您应该使用AlarmManager。请参阅此问题以获取有关此问题的帮助。没有必要浪费用户的内存,让您的服务保持10分钟不做任何事情。此外,如果手机处于休眠状态,计时器将不会运行。使用AlarmManager,手机将每10分钟自动唤醒一次,您的服务将被调用以执行其internet下载任务 您需要使用AlarmManager。看到这个问题了,谢谢。但是为什么我不能使用定时器呢?没有必要浪费用户的内存,让你的服务保持10分钟不做任何事情。此外,如果手机处于休眠状态,计时器将不会运行。通过使用AlarmManager,手机将每10分钟自动唤醒一次,您的服务将被呼叫以执行其internet下载任务。谢谢。请回答,我会记下来。谢谢你的回复。我试图更好地解释:我执行服务,并在服务的onCreate()方法中执行timer(类的成员)timer.scheduleAtFixedRate(..)。然后服务执行服务的onDestroy()方法,但计时器仍然工作。很好,我需要每5分钟检查一次网络服务。但如果我已经停止服务,我怎么能停止计时器呢?或者我如何组织每5分钟检查一次web服务?根据您的说法,Timertask应该在您终止服务后继续存在。。。。因此,它必须不是服务的成员。将TimerTask引用保留在可以一直运行的某个类中。如果你没有一个一直运行的类,那么创建一个。。。您可能应该为此启动一个新线程。。。也就是说,如果你发布了一些演示代码,那么纠正错误就容易多了。