Android WorkManager:是否可以设置任务的最长执行时间
Android WorkManager: Is it possible to set task's maximum execution duration
我有一个在后台请求位置更新的周期性任务,但我需要限制这个任务长时间工作,因为它会耗尽电池电量,所以我需要在几分钟后停止它(3 分钟)。 Work Manager 是否提供一些机制来限制任务的执行时间?
WorkManager 没有此功能。
当 运行 启动一个 Worker 然后 OS 将停止该 Worker 时有 10 分钟的硬性限制(这可以克服将 Worker 提升到前台服务的问题,如博客中所述:Use WorkManager for immediate background execution).
如果你想实现 3 分钟的超时,你需要在你的 worker 中实现它。
使用 Kotlin 和 CoroutineWorker,这可以通过 withTimeout
在您想要 运行 的代码块上使用
来实现:
class MyWorker(
appContext: Context,
private val params: WorkerParameters
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
return withTimeout(3 * 60 * 1000) {
// Do a long computation
// ...
return@withTimeout Result.success()
}
}
}
我有一个在后台请求位置更新的周期性任务,但我需要限制这个任务长时间工作,因为它会耗尽电池电量,所以我需要在几分钟后停止它(3 分钟)。 Work Manager 是否提供一些机制来限制任务的执行时间?
WorkManager 没有此功能。
当 运行 启动一个 Worker 然后 OS 将停止该 Worker 时有 10 分钟的硬性限制(这可以克服将 Worker 提升到前台服务的问题,如博客中所述:Use WorkManager for immediate background execution).
如果你想实现 3 分钟的超时,你需要在你的 worker 中实现它。
使用 Kotlin 和 CoroutineWorker,这可以通过 withTimeout
在您想要 运行 的代码块上使用
class MyWorker(
appContext: Context,
private val params: WorkerParameters
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result {
return withTimeout(3 * 60 * 1000) {
// Do a long computation
// ...
return@withTimeout Result.success()
}
}
}