You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用RequirementsEnforced时,Evernote Android Job执行窗口结束时间是否被忽略?

Evernote Android Job:setRequirementsEnforced(true)对执行窗口的影响

先说说你的场景:你用Evernote的Android Job库调度了一个需要联网才能运行的任务,代码是这样的:

new JobRequest.Builder(DemoSyncJob.TAG)
    .setExecutionWindow(1L, SECONDS.toMillis(10))
    .setRequiredNetworkType(CONNECTED)
    .setRequirementsEnforced(true)
    .build()
    .schedule();

你观察到一个现象:哪怕执行窗口的结束时间(也就是10秒后)已经过了,只要设备还没联网,调度器就会一直等,等联网后任务还是会跑。所以你疑惑,是不是设置setRequirementsEnforced(true)之后,setExecutionWindow的endInMs参数就被完全忽略了?

其实不是完全忽略,这里得拆解下这两个配置的逻辑关系:

  • setExecutionWindow(startInMs, endInMs):它的作用是告诉系统,任务「优先在这个时间窗口内执行」,是一个时间范围建议;
  • setRequirementsEnforced(true):这是给任务加上了硬约束——必须满足所有指定的条件(这里就是联网),任务才能被执行。

具体的执行逻辑是这样的:

  • 如果在执行窗口的时间范围内,设备满足了联网要求,系统会在窗口内挑选合适的时机执行任务,这时候endInMs是正常生效的;
  • 如果执行窗口结束了,但联网要求还没满足,因为你设置了setRequirementsEnforced(true),任务不会被直接丢弃,而是会进入等待队列,直到联网条件满足后,立刻(或系统调度合适时机)执行任务。

简单说,endInMs不是被完全忽略,而是当约束条件未满足时,任务的执行会突破窗口的时间限制——毕竟你明确要求了必须满足条件才执行,系统不会因为时间到了就放弃这个任务。

反过来,如果把setRequirementsEnforced(false),那当执行窗口结束时,不管有没有联网,任务都会被取消,不会再执行,这时候endInMs就是严格生效的。

内容的提问来源于stack exchange,提问作者Piotr Aleksander Chmielowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:15:05