2

由于我的应用程序必须可用于 Android 4.x 版本,因此我不能仅依赖 JobScheduler 进行后台活动。Firebase JobDispatcher 向后兼容我需要的版本,所以我对其进行了一些测试。

我的期望是,它在 Android <5 时使用 Google Play 服务,在 5+ 时使用 JobScheduler API,正如在 Google I/O 2016 上的Android 电池和内存优化谈话的这张幻灯片中所见。

我使用 JobDispatcher 在自己的应用程序中安排的作业和 Firebase JobDispatcher 附带的 testapp 可以正常工作。打电话时我看不到任何活动adb shell dumpsys jobscheduler。当我直接使用 JobScheduler 时,我可以毫无问题地看到那里的作业。

所以我猜我上面链接的幻灯片是错误的?在 Android 5+ 上是否可以让 JobDispatcher 使用 JobScheduler?也许使用自定义驱动程序?

4

1 回答 1

0

我在 Android 7.1.1 上获得了控制台输出......不要太少:

adb shell dumpsys jobscheduler | grep x\ active

在过去的 SDK 版本dumpsys jobscheduler中,可能无法转储不存在的内容(启动此类 SDK 版本,然后发出命令会显示,因为它何时工作)。

虽然从 Android 7.0.0 开始有一个新命令jobscheduler

adb shell cmd jobscheduler help

Job scheduler (jobscheduler) commands:
  help
    Print this help text.
  run [-f | --force] [-u | --user USER_ID] PACKAGE JOB_ID
    Trigger immediate execution of a specific scheduled job.
    Options:
      -f or --force: run the job even if technical constraints such as connectivity are not currently met
      -u or --user: specify which users job is to be run; the default is the primary or system user

作业调度器和作业调度器是两个完全不同的东西。调度程序已经向后兼容的驱动程序(因此不能指望操作系统拥有调度程序)。

请参阅JobSchedulerShellCommand.java或此答案可能会进一步解释。

一般来说,android-job库的功能也完全一样。

于 2017-03-16T21:07:10.133 回答