JobScheduler.Enqueue(JobInfo, JobWorkItem) 方法

定义

类似于 #schedule,但允许将新 <em>或 existing</em> 作业的工作排队。

[Android.Runtime.Register("enqueue", "(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I", "GetEnqueue_Landroid_app_job_JobInfo_Landroid_app_job_JobWorkItem_Handler", ApiSince=26)]
public abstract int Enqueue (Android.App.Job.JobInfo job, Android.App.Job.JobWorkItem work);
[<Android.Runtime.Register("enqueue", "(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I", "GetEnqueue_Landroid_app_job_JobInfo_Landroid_app_job_JobWorkItem_Handler", ApiSince=26)>]
abstract member Enqueue : Android.App.Job.JobInfo * Android.App.Job.JobWorkItem -> int

参数

job
JobInfo

要排队的工作。 有关可以计划的作业类型的详细信息,请参阅 android.app.job.JobInfo.Builder JobInfo.Builder

work
JobWorkItem

排队的新工作。 在作业开始运行时,稍后将可用。

返回

排队请求的结果。

属性

注解

类似于 #schedule,但允许将新 <em>或 existing</em> 作业的工作排队。 如果已计划具有相同 ID 的作业,则会将其替换为新 JobInfo作业,但以前排队的任何工作都将在下次运行时保留并调度。 如果运行具有相同 ID 的作业,则新工作将排队,而不会停止该作业。

稍后将通过 JobParameters#dequeueWork() JobParameters.dequeueWork检索排队的工作。 请务必查看有关如何处理工作的信息;排队工作的行为会更改应如何处理执行作业的整体生命周期。

强烈建议你对排队的所有工作使用相同的 JobInfo 工作。 这将允许系统与任何挂起和/或当前正在运行的工作一起以最佳方式安排工作。 如果 JobInfo 在上次排队时发生更改,系统将需要更新关联的 JobInfo,这可能会导致执行中断。 具体而言,这可能会导致任何当前正在运行的作业正在处理以前的工作,以使用新的 JobInfo 停止和重启。

建议避免使用 JobInfo.Builder#setExtras(PersistableBundle)JobInfo.Builder#setTransientExtras(Bundle) 与 JobInfo 一起使用,以便排队工作。 系统将尝试将这些额外项与以前的 JobInfo 进行比较,但在某些情况下,可能会出错,并将 JobInfo 计数为更改。 (也就是说,你应该相对安全,在这些字段中有一组简单的一致数据。不应用于 JobInfo.Builder#setClipData(ClipData, int) 排队的工作,因为目前这始终被视为不同的 JobInfo,即使 ClipData 内容完全相同。

<p class=“warning”><strong Note:</strong>> Schedule a job can have a high cost, if it's reschuling the same job and the job't execute, especially on platform versions before versionandroid.os.Build.VERSION_CODES#Q. 因此,如果调用在短时间内过于频繁,系统可能会限制对此 API 的调用。

<p class=“warning”><strong Note:</strong>> 在 Android 版本android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE之前,JobWorkItems 无法持久保存。 不允许应用将 JobWorkItems 与持久化作业排队,如果系统尝试这样做,系统将引发 IllegalArgumentException 该作业。 从 android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE头开始,JobWorkItems 可以与托管作业一起持久保存。 但是,不能保留意向。 为需要保留的任何信息设置一个 PersistableBundle 用法 JobWorkItem.Builder#setExtras(PersistableBundle)

注意:需要启用 JobService 组件才能成功计划作业。

适用于 . 的 android.app.job.JobScheduler.enqueue(android.app.job.JobInfo, android.app.job.JobWorkItem)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于