如果我从不调用 jobFinished 会发生什么?
只要 JobService 正在(或认为正在)工作,它就会持有唤醒锁。在您返回的情况下,true
您onStartJob()
有责任在工作完成时通知系统。
通过调用jobFinished()
您表明工作已完成,然后 JobService 知道它可以释放唤醒锁。如果你不调用jobFinished()
,wakelock 不会被释放,并且会持续消耗 CPU。
Android 会在某个时候终止工作服务吗?
JobService 是 Service 的子类,所以是的。在某些情况下,操作系统会终止服务(例如内存不足)。
它会允许生成 JobService 的新实例吗?还是会阻止其他服务启动?可以共存的 JobService 是否存在最大数量?
- 您无需手动创建/实例化 JobServices。
- JobService 一次只能处理一项工作。
如果您schedule()
为相同的 JobService和具有相同 JobInfo id 的新作业,当前作业将停止并启动新作业。
int schedule (JobInfo job)
安排要执行的作业。将使用 JobInfo 中的新信息替换任何当前计划的具有相同 ID 的作业。如果具有给定 ID 的作业当前正在运行,它将被停止。
如果您enqueue()
为同一个 JobService 新建作业,它们将仅在当前作业完成后执行。如果调用失败jobFinished()
,队列中的下一个作业将不会运行。
int enqueue (JobInfo job, work)
类似于 schedule(JobInfo),但允许您为新的或现有的工作排队。如果已经安排了具有相同 ID 的作业,它将被新的 JobInfo 替换,但任何先前排队的工作都将保留并在下次运行时分派。如果具有相同 ID 的作业已在运行,则新作业将为其排队。
为同一个 JobService 排队作业与使用schedule()
. 如需完整参考,请参阅其文档。