我想使用Lollipop上提供的新JobScheduler API,但遗憾的是它没有用于pre-Lollipop的官方端口.
但是,有GcmTaskService,它提供了非常相似的功能.
这个API很新,所以很少有地方可以查找如何使用它的信息(例如这里和这里).
我对这个新API有几个问题:
它似乎需要使用Google Play服务(此处)(除非使用Lollipop版本的Android,它将使用正常的JobScheduler).如果Google Play服务不可用,我该怎么办?
似乎即使我使用"setPersisted(true)"来执行重复任务,当我重新启动设备时,也不会再次调用该任务.怎么会?编辑:那是因为我错过了RECEIVE_BOOT_COMPLETED的许可.
如果我不使用"setRequiredNetwork",任务的默认行为是什么?是"NETWORK_STATE_ANY"吗?
该文档说一下什么是从onRunTask回来后,我可以返回任何值"RESULT_FAILURE","RESULT_RESCHEDULE","RESULT_SUCCESS"(信息的位置).似乎FAILURE和SUCCESS选项都会做同样的事情 - 从队列中删除任务.这是真的吗?如果是这样,它们之间究竟有什么区别?他们的功能不同吗?
" TaskParams " 是否仅用于任务的标记?我可以以某种方式使用API将包传递给任务吗?否则,我需要设置一个DB来存储应该传递给任务的内容,对吗?
应用程序是否可以获取任务的队列?我知道使用adb是可能的,但也可以使用API吗?
他们说(这里)每个任务都有一个长达3分钟的唤醒锁.如果任务需要更多,应该怎么做?它应该为自己获得另一个唤醒锁吗?API是否会警告唤醒锁被释放?以下是文档所说的内容:
调度程序将为您的服务保留一个PowerManager.WakeLock,但是如果您的任务没有返回,执行三分钟后,它将被视为已超时,并且将释放唤醒锁.此时重新安排任务将不起作用.如果您怀疑自己的任务运行时间超过此时间,则应明确启动自己的服务或使用其他机制; 此API旨在用于相对快速的网络操作.
他们说(这里)每次应用程序升级/替换时都会删除所有网络任务,并且在发生这种情况时会调用"onInitializeTasks",并且您可以再次重新安排它们.我该如何重新安排任务?我认为我甚至无法获得任务清单......
有可能告诉任务更喜欢白天的特定时间吗?例如,在14:00-15:00之间?
我注意到,如果您安排任务,然后强制停止和/或清除应用程序的数据,该任务仍将运行.我该如何避免这种行为?
android android-5.0-lollipop android-jobscheduler gcmtaskservice
是否有一个库或至少一些开源示例提供了新的Android-L JobScheduler API的功能.这并不难实现我自己的版本(功能非常有限),但另一方面它也不是微不足道的.
总结一下,至少可以提供新JobScheduler API的功能子集吗?