gpt4 book ai didi

android - JobService 的 onStartJob 方法在作业被安排后立即执行

转载 作者:行者123 更新时间:2023-11-29 02:22:35 25 4
gpt4 key购买 nike

在 Android 应用程序上工作时,我使用 FirebaseJobDispatcher 每 1 分钟运行一次作业。

问题

只要我运行应用程序,作业就会执行,然后每 1 分钟执行一次。

问题

为什么在安排作业时立即调用 onStartJob?为什么在执行前不等待 1 分钟?我做错了什么?

代码

public static void scheduleReminders(Context context) {

Driver driver = new GooglePlayDriver(context);
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);

Job job = dispatcher.newJobBuilder()
.setService(ReminderJobService.class)
.setTag(JOB_TAG)
.setConstraints(Constraint.ON_ANY_NETWORK)
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setReplaceCurrent(true)
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
.setTrigger(Trigger.executionWindow(60, 65))
.build();

dispatcher.mustSchedule(job);
}

scheduleReminders 函数从主 Activity 的 onCreate 方法调用。

最佳答案

Trigger源码包含:

  /**
* Creates a new ExecutionWindow based on the provided time interval.
*
* @param windowStart The earliest time (in seconds) the job should be considered eligible to run.
* Calculated from when the job was scheduled (for new jobs) or last run (for recurring jobs).
* @param windowEnd The latest time (in seconds) the job should be run in an ideal world.
* Calculated in the same way as {@code windowStart}.
* @throws IllegalArgumentException if the provided parameters are too restrictive.
*/

由于您正在安排重复作业 (.setRecurring(true)),窗口开始时间将从作业上次运行开始,如果您重新安排,这可能会导致问题 一分钟前的作业没有任何变化,尽管 setReplaceCurrent(true) 应该可以避免这个问题。

更可能的原因(如@CommonsWare 所说)是这些触发器不是完全准确,它们是您希望操作系统安排您的工作的时间,而不是它实际执行的时间运行。上面评论中的 in an ideal world 短语是关键!

增加在正确时间执行的可能性的一种方法是增加操作系统的机会窗口,例如 50 秒和 100 秒而不是 60 秒和 65 秒。或者,如果您需要在准确的时间执行某些操作,也许是警报是一种更好的方法。

关于android - JobService 的 onStartJob 方法在作业被安排后立即执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54365846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com