我有一个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) {
}
}
我知道这有点晚了,但是当我在搜索时偶然发现这篇文章时
这是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”