因为我的应用程序必须可用于Android版本4。我不能仅仅依靠JobScheduler来处理后台活动。Firebase JobDispatcher与我需要的版本向后兼容,所以我对它进行了一些测试。
我的期望是,它在Android <5上使用Google Play服务,在5+时使用JobScheduler API,正如这张幻灯片所示,来自Android电池和内存优化在Google I/O 2016上的演讲。
我在自己的应用程序中使用JobDispatcher和Firebase JobDispatcher附带的testapp调度的作业可以工作。呼叫adb shell dumpsys jobscheduler
时没有看到任何活动。当我直接使用JobScheduler时,我可以毫无问题地看到那里的作业。
所以我猜我上面链接的幻灯片是错误的?是否可以让JobDispatcher在Android 5+上使用JobScheduler ?也许有一个定制的司机?
我在Android 7.1.1上得到控制台输出…Not too less:
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库通常也做同样的事情。