背景
我想使用在Lollipop上介绍的新的JobScheduler API,但很遗憾它没有官方的pre-Lollipop版本。
不过,有GcmTaskService,提供非常相似的功能。
问题
这个API相当新,所以很少有地方可以找到如何使用它的信息(例如这里和这里)。
问题列表
看起来需要使用Google Play服务(这里)来使用它(除了使用Android Lollipop版本的设备外,它将使用正常的JobScheduler)。如果没有Google Play服务怎么办?
虽然我对一个重复的任务使用了"setPersisted(true)",但当我重新启动设备时,任务不会再次被调用。为什么?编辑:因为我错过了RECEIVE_BOOT_COMPLETED权限。
如果我没有使用"setRequiredNetwork",任务的默认行为是什么?是"NETWORK_STATE_ANY"吗?
这个文档中提到了onRunTask返回的值,我可以返回"RESULT_FAILURE"、"RESULT_RESCHEDULE"或"RESULT_SUCCESS"中的任意一个(更多信息请参见此处)。似乎FAILURE和SUCCESS选项会做相同的事情——从队列中删除任务。这是真的吗?如果是,它们之间的区别究竟是什么?它们的功能不同吗?
"TaskParams"只用于任务的标签吗?我能否通过API传递bundle给任务?否则,我需要设置一个数据库来存储应传递给任务的内容,正确吗?
应用程序是否可以获取任务队列?我知道使用adb是可能的,但使用API也可能吗?
他们在这里说(此处)每个任务有一个长达3分钟的唤醒锁。如果任务需要更长的时间怎么办?它应该为自己获取另一个唤醒锁吗?API会警告唤醒锁已释放吗?文档中的说明如下:
调度程序将为您的服务持有PowerManager.WakeLock, 但是执行3分钟后,如果您的任务没有返回,它将被视为超时,并且唤醒锁将被 释放。此时重新安排你的任务将没有任何效果。如果 您怀疑您的任务将运行时间比这更长,您应该显式地启动自己的服务或使用其他机制;此API旨在用于相对较快的网络操作。
他们在这里说(这里),每当应用程序升级或替换时,所有网络任务都会被删除,并在此发生时调用“onInitializeTasks”,您可以重新安排它们。我如何重新安排任务?我认为我甚至无法获取任务列表...
是否可能告诉任务在一天中的特定时间段内偏好特定的时间?例如,在14:00至15:00之间?
我注意到如果您安排了任务,然后强制停止和/或清除应用程序数据,则该任务仍将运行。我如何避免这种行为?