【问题标题】:Stop the scheduled Periodic Job?停止预定的定期作业?
【发布时间】:2018-07-19 05:26:21
【问题描述】:
我一直在使用android-job Evernote 库。我的工作每 30 分钟连续运行一次。我一直在使用代码来安排工作
new JobRequest.Builder(TrackJob.TAG)
.setPeriodic(TimeUnit.MINUTES.toMillis(30), TimeUnit.MINUTES.toMillis(5))
.setUpdateCurrent(true)
.setPersisted(true)
.build()
.schedule();
现在我想在用户单击按钮时停止此作业。我将如何实现这一目标?
提前致谢。
【问题讨论】:
标签:
android
android-5.0-lollipop
android-7.0-nougat
android-jobscheduler
android-job
【解决方案1】:
获取作业 ID:
int jobId = new JobRequest.Builder(DemoSyncJob.TAG)
.setExecutionWindow(30_000L, 40_000L)
.setBackoffCriteria(5_000L, JobRequest.BackoffPolicy.EXPONENTIAL)
.setRequiresCharging(true)
.setRequiresDeviceIdle(false)
.setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
.setExtras(extras)
.setRequirementsEnforced(true)
.setUpdateCurrent(true)
.build()
.schedule();
通过按钮取消:
Button _button = new Button(this) ;
_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JobManager.instance().cancel(jobId);
}
});
注意:
您可以使用SharedPreference 来存储jobId 以供以后使用。我的意思是,如果您想在应用程序重新启动后取消作业。
根据 Wiki,也可以使用 Job.TAG 取消作业。我试过但无法取消。 (V1.2.5)
【解决方案2】:
你可以这样做:
JobManager.instance().cancelAllForTag(your-job-tag);
或
JobManager.instance().cancel(your-job-id)