[英]How to run service in background every 1 minute
I need the service to be started every 1 minutes that run in background even if my application is not running即使我的应用程序没有运行,我也需要每 1 分钟启动一次在后台运行的服务
Here is part of the code: `这是代码的一部分:`
I use the timer to handle call every 1 minute我使用计时器每 1 分钟处理一次电话
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask hourlyTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@SuppressWarnings("unchecked")
public void run() {
try {
Intent intent = new Intent(ServiceMain.this, LocationMonitoringService.class);
startService(intent);
// Toast.makeText(testServiceMain.this, "test", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(hourlyTask, 3, 1000 * 10);
}
` Thank you `谢谢
Android TimerTask Example Android TimerTask 示例
TimerTask Represents the task will run specified time and it will run only once or Repeat. TimerTask 表示任务将运行指定的时间,它只会运行一次或重复。
Create new Class new TimerTask.创建新的类 new TimerTask。
TimerTask Having two methods. TimerTask 有两种方法。
-->
1 .scheduledExecutionTime() // Repeat Task
2 .schedule() //Only once
Timer singleTask=new Timer();
Timer repeatTask=new Timer();
int singleTaskInterval=3000; // 3 sec
int repeatInterval=10000; // 10 sec
// this task for specified time only once it will run
singleTask.schedule(new TimerTask(){
@Override
public void run(){
// Here do something
// This task will run 3 sec only once.
}
},1000);
// this task for specified time it will run Repeat
repeatTask.scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
// Here do something
// This task will run every 10 sec repeat
}
},0,repeatInterval);
When your activity went to destroy or stop.you should cancel this task
-->-->
@Override
protected void onDestroy(){
super.onDestroy();
if(singleTask!=null){
singleTask.cancel();
}
if(repeatTask!=null){
repeatTask.cancel();
}
}
Activity Code
/**
* @author vijayakumar
*/
public class AndroidMADQAActivity extends Activity {
/**
* Called when the activity is first created.
*/
Timer singleTask = new Timer();
Timer repeatTask = new Timer();
int singleTaskInterval = 3000; // 3 sec
int repeatInterval = 10000; // 10 sec
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
singleTask.schedule(new TimerTask() {
@Override
public void run() {
// Here do something
// This task will run 3 sec only once.
}
}, 1000);
repeatTask.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Here do something
// This task will run every 10 sec repeat
}
}, 0, repeatInterval);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (singleTask != null) {
singleTask.cancel();
}
if (repeatTask != null) {
repeatTask.cancel();
}
}
}
You need to use Alarm Manager of android which will start your service in what time you have set in Alarm Manager您需要使用 android 的警报管理器,它将在您在警报管理器中设置的时间启动您的服务
Look at this developer guide看看这个开发者指南
http://developer.android.com/training/scheduling/alarms.htmlhttp://developer.android.com/training/scheduling/alarms.html
For Timer do like this对于定时器这样做
Timer timer = new Timer() ;
MyTimer myTask = new MyTimer (timer) ;
int firstSart = 1000 ; // it means after 1 second.
int period = 1000*60 ; //after which the task will repeat;(After 60 seconds)
timer.schedule(myTask, firstSart, period) ;//the time specified in millisecond
Create separate class for timer & put service there or you can pass through constructor in case of generic code-为计时器创建单独的类并将服务放在那里,或者您可以在通用代码的情况下通过构造函数 -
import java.util.Timer;
import java.util.TimerTask;
/* This is scheduler class which have scheduleing operation logic*/
public class MyTimer extends TimerTask {
Timer timer ;
int count = 0 ;
public MyTimer () {
}
public MyTimer ( Timer timer ) {
this.timer = timer ;
}
public void toDo() {
Intent intent = new Intent(ServiceMain.this, LocationMonitoringService.class);
startService(intent);
}
@Override
public void run () {
toDo () ;
if (count > 10) {
// this is the condition when you want to stop the task here i have not incriges the value of count
//so it will run in infinite loop.
timer.cancel () ;
}
}
}
use in code在代码中使用
Timer timer ;
int count = 0 ;
if (count > 10) {
// Enter your code
//It will run N number of time
timer.cancel () ;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.