标签: gcmtaskservice

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

背景

Google有多种工作/任务调度解决方案,例如JobSchedulerGcmTaskService.每个都有自己的优点和缺点.

最近,Google推出了一个名为"Firebase JobDispatcher"的新库.

问题

遗憾的是,关于这个新API的知识很少.事实上,很难找到任何关于它的东西.

我发现的只有他们的公告视频样本.但即使是他们,也没有太多关于这个API的知识.

问题

看看之前的问题,调查和我与其他API(例如,这里)的比较,我想问一下新的API是如何工作的,并且知道在使用它时应该考虑什么:

  1. 作业是否可以使用与之相关的参数,甚至可以在需要时进行修改?他们在示例中说" 一个可选的用户提供的附加软件包.默认是一个空的Bundle. "这是吗?它可以在执行时被作业修改吗?

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

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

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

  5. RECEIVE_BOOT_COMPLETED如果我希望即使重启设备仍然可以安排作业,是否需要?样本似乎有它.

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

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

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

  9. 该方法onStartJobJobService类返回一个布尔和它的说明" 是否有剩余的更多的工作. "这是什么意思?方法的needsReschedule参数是什么jobFinished意思?它们是否相互关联?

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

android android-jobscheduler firebase-job-dispatcher gcmtaskservice

70
推荐指数
1
解决办法
1万
查看次数

关于GcmTaskService的一些问题

背景

我想使用Lollipop上提供的新JobScheduler API,但遗憾的是它没有用于pre-Lollipop的官方端口.

但是,有GcmTaskService,它提供了非常相似的功能.

问题

这个API很新,所以很少有地方可以查找如何使用它的信息(例如这里这里).

问题

我对这个新API有几个问题:

  1. 它似乎需要使用Google Play服务(此处)(除非使用Lollipop版本的Android,它将使用正常的JobScheduler).如果Google Play服务不可用,我该怎么办?

  2. 似乎即使我使用"setPersisted(true)"来执行重复任务,当我重新启动设备时,也不会再次调用该任务.怎么会?编辑:那是因为我错过了RECEIVE_BOOT_COMPLETED的许可.

  3. 如果我不使用"setRequiredNetwork",任务的默认行为是什么?是"NETWORK_STATE_ANY"吗?

  4. 文档说一下什么是从onRunTask回来后,我可以返回任何值"RESULT_FAILURE","RESULT_RESCHEDULE","RESULT_SUCCESS"(信息的位置).似乎FAILURE和SUCCESS选项都会做同样的事情 - 从队列中删除任务.这是真的吗?如果是这样,它们之间究竟有什么区别?他们的功能不同吗?

  5. " TaskParams " 是否仅用于任务的标记?我可以以某种方式使用API​​将包传递给任务吗?否则,我需要设置一个DB来存储应该传递给任务的内容,对吗?

  6. 应用程序是否可以获取任务的队列?我知道使用adb是可能的,但也可以使用API​​吗?

  7. 他们说(这里)每个任务都有一个长达3分钟的唤醒锁.如果任务需要更多,应该怎么做?它应该为自己获得另一个唤醒锁吗?API是否会警告唤醒锁被释放?以下是文档所说的内容:

调度程序将为您的服务保留一个PowerManager.WakeLock,但是如果您的任务没有返回,执行三分钟后,它将被视为已超时,并且将释放唤醒锁.此时重新安排任务将不起作用.如果您怀疑自己的任务运行时间超过此时间,则应明确启动自己的服务或使用其他机制; 此API旨在用于相对快速的网络操作.

  1. 他们说(这里)每次应用程序升级/替换时都会删除所有网络任务,并且在发生这种情况时会调用"onInitializeTasks",并且您可以再次重新安排它们.我该如何重新安排任务?我认为我甚至无法获得任务清单......

  2. 有可能告诉任务更喜欢白天的特定时间吗?例如,在14:00-15:00之间?

  3. 我注意到,如果您安排任务,然后强制停止和/或清除应用程序的数据,该任务仍将运行.我该如何避免这种行为?

android android-5.0-lollipop android-jobscheduler gcmtaskservice

21
推荐指数
2
解决办法
6050
查看次数

GCM Network Manager失去了工作

我正在尝试使用GCM网络管理器将日志发送到后端服务.我们每隔一小时运行一次警报,创建一个OneoffTask,在执行时,将使用日志消息调用后端服务.

这很有效,但是大量的任务都丢失了(超过一半).起初,我认为它与我们的后端或网络有关,但是在添加了大量的文件记录之后,事实证明服务中的onRunTask从未被触发用于这些任务(但它们肯定会被安排.为什么这些丢失了吗?我误解了API,还是OneoffTasks根本不可靠?

这就是OneoffTask的安排方式:

GcmNetworkManager.getInstance(context).schedule(new OneoffTask.Builder()
    .setService(AvroLogService.class)
    .setExtras(bundle)

    // A mandatory tag which identifies the task
    // We add a unique hash to the tag to make sure that
    // tasks are logged and not thrown away as dupes.
    // See: http://stackoverflow.com/q/34528960/304262
    .setTag(java.util.UUID.randomUUID().toString())

    // Persist to disk, even across boots:
    .setPersisted(true)

    // Sets a time frame for the execution of this task in seconds.
    // This specifically means that the task can either be
    // executed right now, or at latest …
Run Code Online (Sandbox Code Playgroud)

android android-service google-cloud-messaging gcm-network-manager gcmtaskservice

7
推荐指数
1
解决办法
412
查看次数