- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 是否真的会在 wifi 恢复时触发作业立即运行,或者如果 wifi 恰好可用,作业将作为另一批预定作业的一部分运行。
我问的唯一原因是,因为我一直在试验,它似乎已经完成了两件事。以 Nougat 为例,它似乎实际上会在 wifi 恢复时触发作业立即运行,而对于 Lollipop(我认为),它似乎只是在等待另一批作业运行。
一个重要的细节,因为如果它没有触发作业在所有版本上一致运行,那么我需要一个广播接收器来在 WIFI 恢复时运行我的上传。
最佳答案
不一定。使用 JobScheduler
,您可以将控制权交给 Android,以决定运行某项内容的最佳时间。然而,JobSchedulerService.java code在maybeQueueReadyJobsForExecutionLockedH
方法的注释中有解释:
/**
* 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/
我正在尝试创建一个循环异步任务来调用带有 JobScheduler 和 JobService 的 Web 服务。但我的想法是尝试每天执行一次此任务,并且始终在同一时间执行。甚至可以让用户更新任务启动日
我正在重构这段代码: https://github.com/r3gis3r/CSipSimple/blob/master/src/com/csipsimple/utils/TimerWrapper.j
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) 是否真的会在 wifi 恢复时触发作业立即运行,或者如果 wifi 恰好可用,作业将作为
我希望用JobScheduler执行一个重复的任务。 我无法完全理解官方文档中有趣的jobFinished()。 如果希望任务可以重复执行,jobFinished(parameters, false)
我正在尝试创建一个在特定时间发送通知的应用程序。我正在查看带有 JobInfo.Builder 的 JobScheduler API,但是当我查看此页面时: https://developer.and
我是一名优秀的程序员,十分优秀!