我有以下任务:使服务执行并从互联网上每10分钟获取一次数据。我尝试使用组合服务+计时器,但在这种情况下,我无法控制服务(我在延迟服务的onCreate()方法中执行TimerTask,并且当我中断服务时TimerTask不会停止)。我只需要2个按钮:“开始服务”和“停止服务”。这种情况下最好的方法是什么?感谢您的帮助。如何为计时器工作提供服务?
回答
如果我很了解你,你想知道如何停止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()。
感谢您的回复。我尝试更好地解释:我执行Service,并在onCreate()方法的服务中执行timer(它是类的成员)timer.scheduleAtFixedRate(..)。然后服务执行onDestroy()方法的服务,但定时器仍然有效。这很好,我需要每隔5分钟检查一次互联网服务。但是,如果我已经停止服务,我该如何停止计时器?或者我如何组织每5分钟检查一次网络服务? – user1078760 2011-12-20 16:10:09
从你所说的话来说,Timertask应该在你终止服务之后生存下来....所以它不能成为Service的成员。在一些你可以一直运行的类中保留TimerTask引用。如果你没有一直在运行的类,那么创建一个......你应该为此启动一个新的线程......如果你发布了一些演示代码,就会更容易纠正你的问题,重新做错了。 – Renato 2011-12-20 16:26:25
您应该使用AlarmManager。看到这个问题Android: How to use AlarmManager寻求帮助。没有必要浪费用户的记忆,保持你的服务10分钟无所事事。另外,如果手机处于睡眠状态,您的计时器将不会运行。通过使用AlarmManager,手机会每隔10分钟自动唤醒一次,并且可以调用您的服务来执行其网络下载任务。
- 1. laravel 5服务提供商不工作我的Web服务器
- 2. 如何从Web服务器提供JSON?
- 3. spark如何实时提供Web服务?
- 4. 如何成为SAML服务提供商
- 5. 作为SAML服务提供商的ADFS
- 6. Azure作为SAML 2.0服务提供商
- 7. Java服务提供API应该如何工作?
- 8. 计时器如何在.net Windows服务中工作?
- 9. Mac .app文件在由网络服务器提供服务后不再工作
- 10. 如何阻止我的apache2服务器提供missile_launch_codes.ini服务?
- 11. 如何从我的IIS 7服务器提供颠覆服务?
- 12. 作业提交在星火作业服务器提供的NullPointerException
- 13. 如何为请求的促销邮件提供smtp服务器?
- 14. 如何为HTTP服务器提供.jasper文件?
- 15. 作为消费者和提供商的IS4 webapi服务器
- 16. 身份服务器4作为Azure应用服务的身份提供商
- 17. 服务提供商如何在IdP服务器上强化密码提示?
- 18. 如何在提供下载对话框时将页面作为html提供服务
- 19. 1作家服务器1搜索服务器实时工作
- 20. Android服务+倒计时=不工作
- 21. android - 实现倒计时工作服务
- 22. 计时器脚本不能在托管服务器上工作
- 23. 如何识别服务器场中的哪个Web服务器提供请求?
- 24. 如何向扩展joomla提供服务?
- 25. 如何从网站提供OAuth服务?
- 26. 如何添加计时器到服务?
- 27. 扩展服务提供商(提供商)
- 28. 使JSON资讯提供服务器到服务器
- 29. 验证服务器如何工作
- 30. “广告服务器”如何工作?
您需要使用AlarmManager。看到这个问题http://stackoverflow.com/questions/1082437/android-alarmmanager – 2011-12-20 16:04:28
谢谢。但为什么我不能使用Timer呢? – user1078760 2011-12-20 16:31:59
没有必要浪费用户的记忆,保持你的服务10分钟无所事事。另外,如果手机处于睡眠状态,您的计时器将不会运行。通过使用AlarmManager,手机将每10分钟自动唤醒一次,并且您的服务可以被称为执行其网络下载任务。 – 2011-12-20 16:36:20