gpt4 book ai didi

android - .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 是否触发作业立即运行有 wifi

转载 作者:行者123 更新时间:2023-11-30 00:15:41 25 4
gpt4 key购买 nike

.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 是否真的会在 wifi 恢复时触发作业立即运行,或者如果 wifi 恰好可用,作业将作为另一批预定作业的一部分运行。

我问的唯一原因是,因为我一直在试验,它似乎已经完成了两件事。以 Nougat 为例,它似乎实际上会在 wifi 恢复时触发作业立即运行,而对于 Lollipop(我认为),它似乎只是在等待另一批作业运行。

一个重要的细节,因为如果它没有触发作业在所有版本上一致运行,那么我需要一个广播接收器来在 WIFI 恢复时运行我的上传。

最佳答案

不一定。使用 JobScheduler,您可以将控制权交给 Android,以决定运行某项内容的最佳时间。然而,JobSchedulerService.java codemaybeQueueReadyJobsForExecutionLockedH方法的注释中有解释:

/**
* The state of at least one job has changed. Here is where we could enforce various
* policies on when we want to execute jobs.
* Right now the policy is such:
* If >1 of the ready jobs is idle mode we send all of them off
* if more than 2 network connectivity jobs are ready we send them all off.
* If more than 4 jobs total are ready we send them all off.
* TODO: It would be nice to consolidate these sort of high-level policies somewhere.
*/

这告诉我,如果我有两个 作业在等待网络,那么它们将在网络打开时运行。我对此进行了测试,发现它是真的。这很有帮助,但我不一定要等待两个作业排队,听起来你也不想。

我终于发现我可以通过调用 SetOverrideDeadline 来更好地控制它何时运行。通过设置截止日期,即使在初始时间不满足网络标准,它也会运行作业。显然,您的代码必须足够智能以处理没有连接的运行,但在初次尝试之后,它会等到所有条件都满足后再试。其原因不在上面的注释中(尽管它应该是),但在该方法的实际代码中可以找到。事实证明,如果有任何 个作业之前失败过,作业调度程序就会运行。以下是同一 maybeQueueReadyJobsForExecutionLockedH 方法的相关 fragment :

for (int i=0; i<jobs.size(); i++) {
JobStatus job = jobs.valueAt(i);
if (isReadyToBeExecutedLocked(job)) {
if (job.getNumFailures() > 0) {
backoffCount++;
}
...

注意上面的 backoffCount 正在递增,因此它计算了之前失败的作业总数。然后几行之后:

if (backoffCount > 0 ||
idleCount >= MIN_IDLE_COUNT ||
connectivityCount >= MIN_CONNECTIVITY_COUNT ||
chargingCount >= MIN_CHARGING_COUNT ||
runnableJobs.size() >= MIN_READY_JOBS_COUNT) {
... run the jobs ...
}

我希望这能为您节省一些时间 - 我为此苦苦挣扎了一段时间!

关于android - .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 是否触发作业立即运行有 wifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47348877/

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