Service学习——第四篇 在服务中执行重复的任务
2014-09-21 14:31
239 查看
Service学习——在服务中执行重复任务
除了在服务中执行长时间运行的任务,一些重复任务也会在服务中执行。比如,一个一直在后台运行的闹钟服务。这时服务可能要定期执行一些代码来检查是否到了一个预设的时间以便发出提醒。要运行一个按固定的时间间隔执行的代码块,可以在服务中使用Timer类。
我的Repeatedly类:
packagecom.example.myservice;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.util.Log;
public classRepeatedly {
privatestatic int counter = 0;
privatestatic Timer timer = new Timer();
staticfinal int UPDATE_INTERVAL = 1000;
publicRepeatedly() {
//TODO Auto-generated constructor stub
}
publicstatic void doSomethingRepeatedly(){
//调用scheduleAtFixeRate方法开始执行任务,还有其他方法,可以查看 api文档
timer.scheduleAtFixedRate(newTimerTask() {
@Override
publicvoid run() {
//TODO Auto-generated method stub
Log.d("MyService",String.valueOf(++counter));
}
},0, UPDATE_INTERVAL);
}
//这里在停止服务时可以调用,以停止这个线程正在执行的代码
publicstatic void stopTimer(){
if(timer!=null){
timer.cancel();
}
}
}
MyService类中需要改变的代码段:
public intonStartCommand(Intent intent, int flags,int startId) {
//TODO Auto-generated method stub
//我们希望这个服务在被显示停止前一直运行,所以返回“粘性的”状态
Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show();
Repeatedly.doSomethingRepeatedly();
return START_STICKY;
}
public void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Repeatedly.stopTimer();
Toast.makeText(this,"Service Stopped", Toast.LENGTH_LONG).show();
}
除了在服务中执行长时间运行的任务,一些重复任务也会在服务中执行。比如,一个一直在后台运行的闹钟服务。这时服务可能要定期执行一些代码来检查是否到了一个预设的时间以便发出提醒。要运行一个按固定的时间间隔执行的代码块,可以在服务中使用Timer类。
我的Repeatedly类:
packagecom.example.myservice;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.util.Log;
public classRepeatedly {
privatestatic int counter = 0;
privatestatic Timer timer = new Timer();
staticfinal int UPDATE_INTERVAL = 1000;
publicRepeatedly() {
//TODO Auto-generated constructor stub
}
publicstatic void doSomethingRepeatedly(){
//调用scheduleAtFixeRate方法开始执行任务,还有其他方法,可以查看 api文档
timer.scheduleAtFixedRate(newTimerTask() {
@Override
publicvoid run() {
//TODO Auto-generated method stub
Log.d("MyService",String.valueOf(++counter));
}
},0, UPDATE_INTERVAL);
}
//这里在停止服务时可以调用,以停止这个线程正在执行的代码
publicstatic void stopTimer(){
if(timer!=null){
timer.cancel();
}
}
}
MyService类中需要改变的代码段:
public intonStartCommand(Intent intent, int flags,int startId) {
//TODO Auto-generated method stub
//我们希望这个服务在被显示停止前一直运行,所以返回“粘性的”状态
Toast.makeText(this,"Service Started", Toast.LENGTH_LONG).show();
Repeatedly.doSomethingRepeatedly();
return START_STICKY;
}
public void onDestroy() {
//TODO Auto-generated method stub
super.onDestroy();
Repeatedly.stopTimer();
Toast.makeText(this,"Service Stopped", Toast.LENGTH_LONG).show();
}
相关文章推荐
- Service学习——第二篇(模拟执行长时间任务)
- Service学习——第三篇 异步执行任务
- 【Android 开发教程】在服务中执行重复任务
- Android中(Service )服务的最佳实践——后台执行的定时任务
- Service学习——第五篇 使用IntentService在单独线程上执行异步任务
- 学习如何每隔一段时间定时重复执行任务
- 学习:VMware Authorization Service 服务因 6000002 服务性错误而停止的解决方法(转)
- C#制作Windows service服务系列二--演示一个定期执行的windows服务及调试
- 在 Java 应用程序中计划重复执行的任务
- 在 Java 应用程序中计划重复执行的任务
- Java 应用程序中计划重复执行的任务
- Windows 定时执行 服务与任务计划
- 使用服务程序实现PHP定时执行任务功能
- Silverlight学习笔记十七BingMap(七)之检索地理位置(GeocodeService服务)
- Android Service学习之AIDL, Parcelable和远程服务
- SSIS常用的包—XML任务,SQL分析服务执行DDL和Processing任务
- 在学习部署WCF如下:ServiceHost 指令中作为服务属性值提供的类型“Service.CalculatorService”。
- ToDoList中如何添加重复执行的任务
- 在java 应用程序中计划重复执行的任务
- C# Windows 开发任务——写定时执行操作的 Windows 服务