2011-12-20 36 views
0

我有以下任务:使服务执行并从互联网上每10分钟获取一次数据。我尝试使用组合服务+计时器,但在这种情况下,我无法控制服务(我在延迟服务的onCreate()方法中执行TimerTask,并且当我中断服务时TimerTask不会停止)。我只需要2个按钮:“开始服务”和“停止服务”。这种情况下最好的方法是什么?感谢您的帮助。如何为计时器工作提供服务?

+0

您需要使用AlarmManager。看到这个问题http://stackoverflow.com/questions/1082437/android-alarmmanager – 2011-12-20 16:04:28

+0

谢谢。但为什么我不能使用Timer呢? – user1078760 2011-12-20 16:31:59

+0

没有必要浪费用户的记忆,保持你的服务10分钟无所事事。另外,如果手机处于睡眠状态,您的计时器将不会运行。通过使用AlarmManager,手机将每10分钟自动唤醒一次,并且您的服务可以被称为执行其网络下载任务。 – 2011-12-20 16:36:20

回答

0

如果我很了解你,你想知道如何停止TimerTask,当你中断你的服务?! 如果是这样,请继续阅读,否则请更好地解释。

要停止TimerTask再次执行(假设它已计划重复运行),您必须调用cancel()方法。首选的方法是让TimerTask在检查一些可以在外部设置的布尔标志后调用cancel()方法。

例如:

class MyTimerTask extends TimerTask() { 

    private boolean alive = true; 

    public void run() { 
     if (alive) { 
      // do something 
     } else { 
      cancel(); 
     } 
    } 

    public void stop() { 
     alive = false; 
    } 
} 

然后,这是很明显,当你打断你的服务,你只需要调用MyTimerTask.stop()。

+0

感谢您的回复。我尝试更好地解释:我执行Service,并在onCreate()方法的服务中执行timer(它是类的成员)timer.scheduleAtFixedRate(..)。然后服务执行onDestroy()方法的服务,但定时器仍然有效。这很好,我需要每隔5分钟检查一次互联网服务。但是,如果我已经停止服务,我该如何停止计时器?或者我如何组织每5分钟检查一次网络服务? – user1078760 2011-12-20 16:10:09

+0

从你所说的话来说,Timertask应该在你终止服务之后生存下来....所以它不能成为Service的成员。在一些你可以一直运行的类中保留TimerTask引用。如果你没有一直在运行的类,那么创建一个......你应该为此启动一个新的线程......如果你发布了一些演示代码,就会更容易纠正你的问题,重新做错了。 – Renato 2011-12-20 16:26:25

1

您应该使用AlarmManager。看到这个问题Android: How to use AlarmManager寻求帮助。没有必要浪费用户的记忆,保持你的服务10分钟无所事事。另外,如果手机处于睡眠状态,您的计时器将不会运行。通过使用AlarmManager,手机会每隔10分钟自动唤醒一次,并且可以调用您的服务来执行其网络下载任务。

相关问题