目前我正在实施Android-Job,一个Evernote服务库Evernote - Android Job
问题
假设用户通过我的应用程序进行交易后我想安排一个后台服务来更新服务器中的某些数据,以便在60秒后运行,无论应用程序是否在前台。所以我安排我的工作是这样的 -
static int scheduleJob() {
Log.d("flow", "scheduleJob");
Log.d("flow", "the number of jobs with this tag : " + JobManager.instance().getAllJobRequestsForTag(ShowNotificationJob.TAG));
return new JobRequest.Builder(ShowNotificationJob.TAG)
// .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED)
// .setExecutionWindow(TimeUnit.MINUTES.toMillis(1), TimeUnit.MINUTES.toMillis(2))
.setExact(30_000L)
.build()
.schedule();
}
请记住,作业是在60秒后安排的,用户可以在60秒内启动另一个交易,这会在60秒后创建另一个作业,并覆盖我的第一个作业。
为了解决这个问题,我在安排一个作业之前检查是否有为此标签安排的作业。如果是,那么不要安排其他日程安排。由于我能够停止覆盖乔布斯,我需要以某种方式排队第二个作业,使其在首次完成后运行,或者与具有相同标签的其他作业异步运行。
由于我在JobCreator中使用新实例创建了一个新作业,因此前一个将被销毁 -
new ShowNotificationJob(ShowNotificationJob.TAG);