Firebase JobDispatcher - 与以前的API(JobScheduler和GcmTaskService)相比,它是如何工作的?

时间:2016-06-09 07:56:29

标签: android android-jobscheduler firebase-job-dispatcher gcmtaskservice

背景

Google有多种解决方案可用于作业/任务安排,例如JobSchedulerGcmTaskService。每个都有自己的优点和缺点。

最近,Google推出了一个名为" Firebase JobDispatcher"的新图书馆。

问题

可悲的是,关于这个新API的内容很少。事实上,很难找到任何相关内容。

我发现的只有announcement videoa sample。但即使是他们,也没有太多关于这个API的知识。

问题

查看之前的问题,调查和我与其他API(例如here)的比较,我想询问新API的工作原理,并了解在使用时需要考虑的因素它:

  1. 作业是否有参数可以保留,甚至可以在需要时进行修改?他们在样本" 中说出了一个可选的用户提供的附加软件包。默认为空Bundle。"是这个吗?可以在执行时修改作业吗?

  2. 可以轻松重新安排工作吗?据说" 一个布尔值,表示作业是否应重复" 。怎样才能选择何时重新安排?我已经尝试过这个样本,并选择了" Recurring",但它似乎再次运行,只有一次。

  3. 它可以保护与图书馆的工作(因为独特的ID)吗?

  4. 更新应用时是否需要格外小心(如先前的API所做的那样)?更新应用后,仍可安排作业吗?对样本进行测试,似乎在更新应用程序后作业已完全消失。可以避免吗?

  5. 是否需要RECEIVE_BOOT_COMPLETED以防我希望即使重启设备也能安排作业?样本似乎有它。

  6. 是否可以获取所有预定作业及其信息(包括参数)的列表,并且能够取消特定/所有作业甚至修改它们?

  7. 在应用程序清除数据操作后是否会删除作业?

  8. 是否有可能告诉工作它会在一段时间内运行(例如:早上7点到8点之间)?它被提及" ExecutionWindowTrigger - 它指定了一个应该执行作业的时间窗口"。是吗?错过这个窗口会发生什么?

  9. onStartJob类中的方法JobService返回一个布尔值,其描述为" 是否还有剩余工作量。&#34 ;这是什么意思? needsReschedule方法的jobFinished参数是什么意思?它们是否相互关联?

  10. 我应该知道哪些限制?例如minimal&每个函数的最大值?

1 个答案:

答案 0 :(得分:97)

实际上Firebase Android JobDispatcher是Android上作业调度引擎的一个抽象层。 目前,他们只有一个GCM网络管理器的驱动程序实现。 这意味着它目前的行为与GCM Network Manager behaves相同。希望将来可以实施更多的驱动程序。

<强> 1。作业是否可以使用与之相关的参数,甚至可以在需要时进行修改?他们在样本&#34;可选的用户提供的附加软件包中说。默认为空Bundle。&#34; 。是这个吗?可以在执行时修改作业吗?

  1. 是的,Job.Builder方法setExtras包含任意捆绑,以后可以通过jobParameters.getExtras()访问。 您无法修改捆绑包(jobParameters仅包含getter)。您可以使用标记setReplaceCurrent(true)重新安排作业并指定新的包。
  2. <强> 2。工作可以轻松重新安排吗?据说&#34;一个布尔值,指示作业是否应该重复&#34; 。怎样才能选择何时重新安排?我已经尝试了样本,并选择了#34; Recurring&#34;,但它似乎再次运行,只有一次。

    1. 要重新安排工作,您需要指定setRecurring(true)setTrigger(Trigger.executionWindow(10, 20))
    2.   

      一旦窗口开始截止日期,就会触发此操作   达到了,鼓励司机在窗前开办工作   如果可能的话结束。

      第3。是否可以保护图书馆的工作(因为有独特的ID)?

      1. 作业标签在您的应用中必须是唯一的。手机上的其他应用程序都有自己的端点&#39; (包名/服务名称)。 要查看GooglePlayDriver的所有预定/已完成作业,请使用

        adb shell dumpsys activity service GcmService

      2. <强> 4。更新应用程序时是否需要格外小心(如先前的API所做的那样)?更新应用后,仍可安排作业吗?对样本进行测试,似乎在更新应用程序后作业已完全消失。可以避免吗?

        1. 至于GCM网络管理员GooglePlayDriver在Google Play服务或应用更新后不会重新安排作业。 这是open issue。所以现在这是你的责任。
        2. <强> 5。它是否需要RECEIVE_BOOT_COMPLETED以防我希望即使重启设备也能安排作业?样本似乎有它。

          1. 是的,你需要这样的许可。 Builder有一个控制行为的参数:setLifetime(Lifetime.FOREVER | UNTIL_NEXT_BOOT) 当然,如果您要创建自己的驱动程序,您将不得不自己照顾生命。
          2. <强> 6。是否可以获取所有预定作业及其信息(包括参数)的列表,并能够取消特定/所有作业甚至修改它们?

            1. 不,与GCM Network Manager相同。 但是,您可以在安排他们播放服务时以某种方式自己跟踪所有工作。
            2. <强> 7。在应用程序的清晰数据操作时是否会删除作业?

              1. 是的,这项工作将被删除。可能在以前的谷歌播放服务版本中,它的表现不同。
              2. <强> 8。是否有可能告诉工作它在一段时间内运行是否最好(例如:早上7点到8点之间)?它被提到&#34; ExecutionWindowTrigger - 它指定了一个应该执行Job的时间窗口&#34; 。是吗?错过这个窗口会发生什么?

                1. 嗯,你可以在7点设置一个警报,并用executionWindow(0, 60*60)安排一个非经常性的工作。这项工作将在7:00至8:00之间运行 你不能使用经常性的工作,因为
                    

                  windowStart - 作业应该是最早的时间(以秒为单位)   被认为有资格运行。从作业计划的时间开始计算   (用于新工作)或最后一次工作(用于重复工作)。

                2. 此外,ExecutionWindowTrigger指定大致时间。它不能保证它会在给定的窗口运行。 如果它错过了窗口,作业将在以后的任何时间运行。

                  <强> 9。方法&#34; onStartJob&#34;在&#34; JobService&#34; class返回一个布尔值,其描述为&#34;是否还剩下更多的工作。&#34; 。这是什么意思? &#34; needsReschedule&#34;是什么?参数&#34; jobFinished&#34;方法意思?它们是否相互关联?

                  1. 如果onStartJob返回false表示您已完成工作。无需调用jobFinishedRESULT_SUCCESS会自动发送。
                  2. 如果onStartJob返回true,则意味着您启动了一个线程并等待结果。与您一样,您必须调用jobFinished来通知Google Play服务是否应该重新安排这项工作。如果是,则将根据RetryStrategy重新安排作业。

                    <强> 10。我应该知道有什么限制吗?例如,每个函数的最小值和最大值是什么?

                      • onStartJob应该尽快将工作卸载到另一个执行线程。它们以SimpleJobService为例,说明您的期望。
                      • Lollipop JobScheduler没有驱动程序实现。还需要处理谷歌播放服务不可用的情况,我们应该基于Driver实施AlarmManager