我有一个定期任务,要求在后台更新位置,但是我需要限制该任务长时间工作,因为它会耗尽电池电量,因此我需要在几分钟后将其停止(3分钟)。工作管理器是否提供某种机制来限制任务的执行时间?
答案 0 :(得分:1)
WorkManager没有此功能。
在运行Worker时有10分钟的硬限制,然后操作系统将停止该Worker(可以克服将Blog提升为前台服务的方式,如博客Use WorkManager for immediate background execution中所述)。
如果要实施3分钟的超时,则需要在工作人员中实施。
使用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()
}
}
}