简体   繁体   English

如何每1分钟在后台运行一次服务

[英]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.

相关问题 如何每10分钟在后台运行一次服务? - How to run service in background every 10 minute? 如何每分钟在Android O中运行后台服务? - How to run the background service in Android O, every minute? 使后台服务在启动时以及每分钟运行 - Make Background Service run on startup as well as every minute 每分钟发送位置的服务,即使应用程序在后台或系统重新启动 - Service to sending location every minute, even if app is in background or system is rebooted 每隔1分钟进行一次后台作业,服务后,我应该调用`stopSelf()`吗? - Background job every 1 minute, service, should I call `stopSelf()`? 每分钟如何运行BroadcastReceiver? - How to run BroadcastReceiver after every minute? 需要在android中每分钟运行一个后台任务 - Need to have one background task to run for every minute in android 每分钟运行一次的服务 - Service that runs every minute 是否可以使用Firebase JobDispatcher永远每1分钟运行一次服务? - Is it ok to run service every 1 minute forever using Firebase JobDispatcher? 如何运行后5秒后无法在Android 5.1中运行后台服务? - How to run background service after every 5 sec not working in android 5.1?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM