setOverrideDeadline()似乎没有效果

时间:2017-12-01 07:18:42

标签: android android-jobscheduler

我有一个应用程序小部件,我希望在一行文字“x minutes ago”中保持最新信息,指的是它下方位图的年龄。我编写的代码如下:

private fun scheduleUpdateAge(context: Context) {
    val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
    val resultCode = jobScheduler.schedule(
            JobInfo.Builder(UPDATE_AGE_JOB_ID, ComponentName(context, UpdateAgeService::class.java))
                    .setMinimumLatency(MINUTE_IN_MILLIS)
                    .setOverrideDeadline(2 * MINUTE_IN_MILLIS)
                    .build())
    reportScheduleResult("update age", MINUTE_IN_MILLIS, resultCode)
}

在最后一行,我检查调度结果,它总是成功的。

在作业服务中,我更新远程视图,然后重新安排作业:

class UpdateAgeService : JobService() {
    override fun onStartJob(params: JobParameters): Boolean {
        MyLog.i("UpdateAgeService start job")
        updateRemoteViews(applicationContext)
        jobFinished(params, false)
        scheduleUpdateAge(applicationContext)
        return false
    }

    override fun onStopJob(params: JobParameters): Boolean {
        MyLog.i("UpdateAgeService stop job")
        return true
    }
}

但是,我一直观察到Android在很长一段时间内都没有调用我的工作,超过十分钟。那时,另一个计划的作业,即刷新位图的作业,也会启动并重置年龄文本。

setOverrideDeadline州的文件

  

设置截止日期,即最大调度延迟。即使没有满足其他要求,这项工作也将在此截止日期前完成。

但Android似乎违反了它。

我在这里错过了什么吗?

我知道安排定期工作的“自然”方式是setPeriodic(),但setPeriodic()也未调用我的工作,其合同明确说明

  

您无法控制何时在此时间间隔内执行此作业,只能保证在此时间间隔内最多执行一次。

对于那种情况,错过了时间表是“按书”。

0 个答案:

没有答案