如何解决工作管理器类在执行 doWork() 方法时有问题
首先让我纠正一下:
工作管理器:可以定义的最小重复间隔为 15 分钟(与 JobScheduler API 相同)。 如果这不正确,请告诉我。
我创建了以下用于执行定期工作请求的类:
object WorkManagerUtils {
fun syncWorkManager() {
val myConstraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = PeriodicWorkRequest
.Builder(MyWorker::class.java,20000,TimeUnit.MILLISECONDS)
.setConstraints(myConstraints)
.build()
WorkManager
.getInstance()
.enqueueUniquePeriodicWork(
Constants.WORKER,ExistingPeriodicWorkPolicy.KEEP,syncRequest)
}
}
下面是我的 Worker 类。请检查:
class MyWorker(val context: Context,param: WorkerParameters) : Worker(context,param) {
override fun doWork(): Result {
if (isNetworkAvailable(context)) {
callSyncApi()
} else {
WorkManagerUtils.syncWorkManager()
}
return Result.success()
}
private fun callSyncApi() {
ToastUtils.shortToast(0,"This is working")
}
}
在我的活动中调用它如下:
WorkManagerUtils.syncWorkManager()
您可以注意到,目前我只是将 toast 作为我的工作展示。我想检查一下这是否有效?
但是 toast 没有显示。
解决方法
任何低于 15 分钟的间隔将被替换为 15 分钟。
假设您的 ToastUtils.showToast(...)
工作正常,我相信工作经理选择了 15 分钟的时间间隔,并且“KEEP”现有工作政策阻止了重新安排和测试。
我建议在测试时将现有的工作策略更改为“REPLACE”。
来自工作管理器 1.0.0 来源:
public final class PeriodicWorkRequest extends WorkRequest {
...
public static final long MIN_PERIODIC_INTERVAL_MILLIS = 15 * 60 * 1000L; // 15 minutes
...
}
public class WorkSpec {
...
public void setPeriodic(long intervalDuration) {
if (intervalDuration < MIN_PERIODIC_INTERVAL_MILLIS) {
...
IntervalDuration = MIN_PERIODIC_INTERVAL_MILLIS;
}
}
...
}
setPeriodic
函数的重载应用了相同的间隔强制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。