我有一个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) {
}
}
答案 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)...,而不是从视图(活动或片段)中调用。