问题标签 [android-jobscheduler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
34573 浏览

android - 有哪些工具可用于测试 JobScheduler?

我们正在通过JobScheduler实现一个 Job用于后台加载数据。这项工作每天大约会触发一次。我们可以使用哪些工具来测试此功能(可能是 ADB)?

用例将能够模拟运行作业所需的条件,或者只是明确地说“运行此作业”作为我们自动化测试套件的一部分。

0 投票
0 回答
118 浏览

android - 使用 JobService 时更新 JobInfo.Builder

使用 JobService 时是否可以更新 JobInfo.builder?我需要更新间隔,所以任务会在满足时间时执行(你知道使用 setInterval 和 setMinimumLatency 时,服务会崩溃)。在以前,我使用 AlarmManager 作为任务调度程序(API < 19),并在使用它时期望相同​​的行为。谢谢你。

0 投票
0 回答
542 浏览

android - Android - 立即开始工作

我正在尝试使用 Android 的 Job Service,但遇到了问题。我安排了一项工作,并将其定期设置为 10 分钟(600000 毫秒)。有没有办法立即开始工作,运行它,然后等待 10 分钟的流逝?

下面的代码是我到目前为止所拥有的,但工作在 10 分钟后开始,然后每 10 分钟开始一次。

此代码位于从 GcmListenerService 扩展的类中(当收到通知时,必须打开服务)。

另外,我尝试开始 2 个独立的工作,一个没有周期性,一个有周期性集。但它也没有奏效。

谢谢!

0 投票
1 回答
3437 浏览

android - Android JobScheduler:使用 setMinimumLatency 和 setPeriodic

我只是在玩玩JobScheduler,有几个小问题。

其中之一是,尽管您可以使用 延迟作业,但setMinimumLatency()不能将其与 结合使用setPeriodic(),因为会引发异常。

我真的不明白为什么会这样……推迟定期工作的开始似乎是合理的,就像推迟一次性工作的开始是合理的一样。

鉴于您不能,使用JobScheduler

0 投票
2 回答
332 浏览

android - Android JobScheduler:有时间限制的工作

JobScheduler可以构建具有JobInfo某些约束的网络,例如“仅在充电时”和/或“仅在空闲时”和/或“仅在连接到未计量(例如 WiFi)网络时”。

是否可以指定作业运行时间的限制例如“不在上午 9.15 和上午 10.15 之间”?因此,您可以将它与“仅使用 WiFi”结合使用,这样如果 WiFi 在上午 9.30 开启,则所有约束都尚未满足,它会等到上午 10.15 运行。

对于一次性工作,这在某种程度上似乎可以使用builder.setMinimumLatency()and builder.setOverrideDeadline(),但是对于使用 建立的定期工作builder.setPeriodic()(不可能将其与其他工作结合使用)呢?

0 投票
1 回答
2444 浏览

android - JobScheduler:控制从满足约束到运行作业的延迟

我正在使用 JobScheduler 来安排作业。主要是我将它用于该.setRequiredNetworkType()方法,它允许您指定您只希望在建立网络连接(或更具体地说是未计量连接)时安排作业。

我正在使用以下非常简单的代码来安排我的工作:

因此,调度只有一个约束:网络连接(可能是“任意”或“未计量”)。

问题的简短版本

如何指定满足所有约束并实际运行作业的最大延迟,例如“在网络连接后 2 秒内运行作业”?

加长版(含杂文)

问题

我发现在某些设备上,如果在已经满足网络约束的时间段内安排了作业,则作业将立即运行(或者速度足够快以被用户感知)。

但是在其他设备上,即使已经有合适的网络连接可用(以便作业可以立即运行),在实际运行之前也会有很大的延迟。因此,如果这是对用户操作的响应,则给人的印象是什么都没有发生,并且应用程序已损坏。

现在,我很清楚这可能是出于JobScheduler……由系​​统来安排作业以最适合其他需求,并且不能保证作业会在所有约束条件下立即运行满意。

但是,如果需要,能够对其进行一些控制会很好。因此,对于按计划进行的工作,无需用户参与,让系统完全控制精确的时间是很好的。

但是在作业响应用户操作的情况下,我希望作业立即运行......假设网络连接在那里。(如果没有连接,则可以显示一条消息,说明当网络连接恢复时将执行该操作,JobScheduler然后确保在网络恢复时作业运行。)

setOverrideDeadline() 不是解决方案吗?

我可以看到JobInfo.Builder确实有一个setOverrideDeadline()方法,这几乎是我想要的。但这指定了从调度作业时开始的最大延迟(即,即使不满足所有约束,也要在 10 秒内运行作业),而不是从满足所有约束时(即在所有约束后 10 秒内运行作业)满足约束)。

编辑:似乎有一个烦人的错误,它可能导致在使用时作业运行两次setOverrideDeadline():请参阅此处此处

Firebase JobDispatcher 呢?

我看到Firebase JobDispatcher有一个Trigger.NOW触发器(“意味着作业应在其运行时约束得到满足后立即运行”)。JobScheduler如果本机不支持这一点,也许这就是要走的路?我被 Firebase JobDispatcher 推迟了,因为它似乎是在使用大锤来解决问题......而且 Firebase 似乎都是关于云消息传递等,这与本地任务调度相距甚远(应该是完全本地关注)。而且它似乎需要 Google Play 服务,这对于本地任务调度来说似乎完全没有必要。此外,如果使用 Firebase 可以立即触发,并且 Firebase 仅JobScheduler用于 Android L+,那么肯定可以直接使用JobScheduler不依赖 Firebase?

编辑:我现在已经尝试过了,甚至Trigger.NOW不能保证立即响应......事实上,我发现我的设备上几乎正好有 30 秒的延迟,这很奇怪。

做不到...

目前,我能看到确保立即执行(如果满足约束)的唯一方法是使用JobScheduler.

或者可能手动进行初始约束检查,setOverrideDeadline()如果满足所有约束,则使用 0 运行作业,否则运行不带setOverrideDeadline().

拥有控制自身时间的能力似乎要好得多JobScheduler,有点像你可以使用的setWindow()方法AlarmManager

0 投票
1 回答
415 浏览

android - Firebase JobDispatcher 是否使用 API 级别 21 以上的 JobScheduler?

我已经阅读了Firebase JobDispatcher使用JobScheduler可用的地方(即从 API 级别 21 及更高级别)的建议,否则使用它自己的方法(基于 Google Play 服务)。

例如,此处的 Google 信息说明如下:

Firebase JobDispatcher 用作针对低于 5.0(API 级别 21)的 Android 版本的应用的 JobScheduler 兼容性层。

但是我发现,对于一个特定的用户,我的应用程序中的一项工作在Android 6.0 设备上通过Firebase JobDispatcher但不是通过启动时可以正常工作。JobScheduler

所以我想我会挖掘Firebase JobDispatcher代码,看看我能找到什么。但是我在库中找不到任何对JobScheduler. 在存储库中搜索该术语不会返回任何结果。

我有点新手,所以不要激怒我,但是这里有人可以告诉我是否Firebase JobDispatcher确实使用JobScheduler,如果是的话,请指出库代码中的位在哪里JobScheduler使用?

0 投票
0 回答
462 浏览

android - 在 JobScheduler 的 JobService 上

我有几个关于 Android 的 JobScheduler 服务的问题。

首先,JobScheduler 的相关 JobService 是如何或/何时开始的?例如,在我调用 schedule 方法或其他方法之后?

我也有点好奇我们究竟是如何将绑定组件传递给绑定的 JobService(它是从 ComponentName 实例中提取的吗?)。

当应用程序消失(崩溃、关闭、停止)时,JobService 的消息队列(而不是系统服务 JobScheduler 的队列)中排队的消息会发生什么?

希望他们清楚。

提前致谢

0 投票
1 回答
3801 浏览

android - 我可以使用 Firebase JobDispatcher 来触发特定时间的任务吗

我正在开发一个应用程序,其中某些任务在特定时间在后台完成。

Android 开发者文档建议了各种方法。我知道 AlarmManager 可以用于此目的。但是,我认为,在打盹模式下使用 Android 6.0 中的 AlarmManager 会产生不正确的触发器。

我从开发人员文档中遇到了 JobScheduling 库

由于我的应用程序支持低于 Android 5.0 的版本。我想到了使用 FireBaseJobDispatcher。

我可以使用 FirebaseJobDispatcher 在特定时间触发特定任务吗?

例如:我想从上午 9 点到下午 6 点每小时更新一次数据库

0 投票
1 回答
6827 浏览

android - 使用 JobScheduler 代替 BroadcastReceiver 和 Service

我正在开发一个应用程序,当设备连接到互联网时,它将在后台按顺序将我的所有数据库记录上传到服务器。

为此,我编写了一个BroadcastReceiver监听网络连接的程序。当这个接收器被触发时,我正在启动后台服务来上传记录。

这是我的代码。

现在我的疑问是

1. 我可以使用JobScheduler做同样的事情吗?
2. 什么是更好的(我的或使用 JobScheduler 的)方法,为什么?