约束和调度
在合适的条件下运行任务
约束和调度 是 CoddyKit 上的免费 Android Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
约束条件与调度
Worker 定义要执行的内容。WorkRequest 定义它在何时以及满足哪些条件时运行。您需要构建请求、附加约束,然后将其入队。
什么是约束条件
约束条件是工作运行前必须满足的条件,例如有网络连接或正在充电。WorkManager 会等待这些条件满足。
构建约束条件
使用 Constraints.Builder 声明您的要求。
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresCharging(true)
.build()常见约束条件类型
常用的约束条件包括:
setRequiredNetworkType(CONNECTED、UNMETERED 等)setRequiresChargingsetRequiresBatteryNotLowsetRequiresDeviceIdlesetRequiresStorageNotLow
构建 OneTimeWorkRequest
对于只运行一次的工作,请使用 OneTimeWorkRequestBuilder,传入您的工作者类,并附加约束条件。
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setConstraints(constraints)
.build()传递输入数据
使用 setInputData 将输入数据附加到请求上;工作者通过 inputData 读取这些数据。
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setInputData(workDataOf("user_id" to "42"))
.setConstraints(constraints)
.build()将工作入队
获取 WorkManager 实例并调用 enqueue。WorkManager 会持久化该请求,并在约束条件满足时运行它。
WorkManager.getInstance(context).enqueue(request)退避策略
当工作者返回 retry() 时,WorkManager 会在重试前等待。使用 setBackoffCriteria 配置策略,并选择线性或指数退避。
val request = OneTimeWorkRequestBuilder<UploadWorker>()
.setBackoffCriteria(
BackoffPolicy.EXPONENTIAL,
10, TimeUnit.SECONDS
)
.build()唯一工作
为避免调度重复任务,请使用带有名称和冲突策略(KEEP、REPLACE 或 APPEND)的 enqueueUniqueWork。
WorkManager.getInstance(context).enqueueUniqueWork(
"sync_job",
ExistingWorkPolicy.KEEP,
request
)观察工作状态
您可以通过 getWorkInfoByIdFlow 或 LiveData 观察请求的状态(ENQUEUED、RUNNING、SUCCEEDED、FAILED),这对于在用户界面中显示进度很有用。
WorkManager.getInstance(context)
.getWorkInfoByIdFlow(request.id)
.collect { info -> /* react to info.state */ }添加标签
使用 addTag 为请求添加标签,之后即可按标签查询或取消相关工作组,例如一次性取消所有“上传”工作。
快速检查
请测试您对约束条件与调度的理解。
回顾
您调度了带约束条件的工作:
Constraints.Builder设置网络和充电等条件OneTimeWorkRequestBuilder构建请求enqueue/enqueueUniqueWork提交请求- 配置退避策略、观察状态并为工作添加标签
下一步:周期性工作与链式工作。
常见问题解答
「约束和调度」课时是免费的吗?
是的 — 「约束和调度」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「约束和调度」这节课中我会学到什么?
在合适的条件下运行任务 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「约束和调度」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。