启动和停止作业调度

时间:2018-02-02 10:03:03

标签: android android-jobscheduler

我有一个jobcheduler代码,运行得很好。我想通过启动和停止按钮开始和结束调度。一旦调度在后台运行,我该如何阻止它,反之亦然?我找不到在任何地方停止调度程序的方法。 cancelAll()仅取消挂起的作业,但调度程序再次起作用。

主要课程

public class LiveTrack extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_live_track);

        //start scheduling
        startLiveTrackBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                jobScheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
                ComponentName jobService =
                                new ComponentName(getPackageName(), MyJobService.class.getName());
                JobInfo jobInfo =
                                new JobInfo.Builder(MYJOBID, jobService)
                                        .setPeriodic(15 * 60 * 1000L)
                                        .setExtras(bundle)
                                        .build();
                int jobId = jobScheduler.schedule(jobInfo);

                if(jobScheduler.schedule(jobInfo)>0){
                }else{
                    Log.e("status","failed");
                }
            }
        }

        //stop scheduling
        endLiveTrackBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //how can I stop scheduling here until the start button is clicked again??  
                jobScheduler.cancelAll();
            }
        });
    }
}

JobService类

public class MyJobService extends JobService{

    @Override
    public boolean onStartJob(JobParameters jobParameters) {
        //some work
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
    }
}

2 个答案:

答案 0 :(得分:0)

我知道有些晚了,但是当我在搜索时偶然发现这篇文章时

这是棒棒糖+的解决方案

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

            with (context.applicationContext.getSystemService(Context.JOB_SCHEDULER_SERVICE)
            as JobScheduler) {
                cancel(MyWorkerService.JOB_ID)
            }
        }

早期版本的替代方法是注册一个接收器并从其内部调用“ stopSelf”

答案 1 :(得分:0)

您可以在作业类“ MyJobService”内停止JobService(在调度程序之后) 通过调用onStopJob(jobParameters)...,而不是从视图(活动或片段)中调用。