相关疑难解决方法(0)

关于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
查看次数

Android JobScheduler的兼容版本 - 替代方案

是否有一个库或至少一些开源示例提供了新的Android-L JobScheduler API的功能.这并不难实现我自己的版本(功能非常有限),但另一方面它也不是微不足道的.

总结一下,至少可以提供新JobScheduler API的功能子集吗?

android android-5.0-lollipop

15
推荐指数
3
解决办法
6036
查看次数