启动和停止作业调度

问题描述 投票:1回答:1

我有一个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) {
    }
}
android android-jobscheduler
1个回答
0
投票

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

这是Lollipop的解决方案

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

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

早期版本的替代方案是注册接收器并从其中调用“stopSelf”

© www.soinside.com 2019 - 2024. All rights reserved.