如果我从不调用 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(). 如需完整参考,请参阅其文档。