首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无论如何,PeriodicWorkRequest都不能工作

无论如何,PeriodicWorkRequest都不能工作
EN

Stack Overflow用户
提问于 2019-11-25 09:36:15
回答 1查看 312关注 0票数 0

PeriodicWorkRequest根本不起作用。如您所见,我已将重复间隔设置为最少15分钟。它进入队列,然后显示正在运行,但仅此而已。什么都没发生,我都等了30分钟了!它就是不起作用。然而,OneTimeWorkRequest工作得很好,没有任何问题,但在PeriodicWorkRequest上就不走运了。请看我下面的代码:

代码语言:javascript
复制
private fun processOneTimeADayNotifyReq() {
        val oneTimeADayReq: PeriodicWorkRequest = PeriodicWorkRequest.Builder(StepCountNotificationWorker::class.java, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
            , TimeUnit.MINUTES)
            .build()
        val workManager: WorkManager = WorkManager.getInstance(this.context)
        workManager.enqueue(oneTimeADayReq)
        this.workerLiveData = workManager.getWorkInfoByIdLiveData(oneTimeADayReq.id)
        this.workerLiveData!!.observeForever(observeStepWorkerLiveData())
    }
    private fun observeStepWorkerLiveData(): Observer<WorkInfo> {
        return Observer {
            if (it?.state == null) {
                return@Observer
            } else {
                when (it.state) {
                    WorkInfo.State.RUNNING -> {
                        Log.i("Running: ", "running")
                    }
                    WorkInfo.State.BLOCKED -> {
                        Log.i("Blocked: ", "blocked")
                    }
                    WorkInfo.State.CANCELLED -> {
                        Log.i("Cancled: ", "canceled")
                    }
                    WorkInfo.State.ENQUEUED -> {
                        Log.i("Enqueued:", "enqueued")
                    }
                    WorkInfo.State.SUCCEEDED -> {
                        val outputData:Data = it.outputData
                        val calories: Int = outputData.getInt(Constants.STEP_COUNT_VALUE, 0)
                        Log.i("Calories: ", calories.toString())
                    }
                    WorkInfo.State.FAILED -> {

                    }
                    else -> {
                        return@Observer
                    }
                }
            }
        }
    }

我还尝试设置了flex间隔:

代码语言:javascript
复制
 val oneTimeADayReq: PeriodicWorkRequest = PeriodicWorkRequest.Builder(StepCountNotificationWorker::class.java, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
            , TimeUnit.MINUTES, PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, TimeUnit.MINUTES)
            .build()

它就是不起作用!我已经尝试使用版本2.3.0-alpha01和2.3.0-beta01。不走运。我用的是谷歌像素3a,targetSdkVersion是29。有人能帮帮忙吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 15:50:21

您正在将重复间隔设置为900000分钟,要将其设置为15分钟,如果使用PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLI,则使用TimeUnit.MILLISECONDS

代码语言:javascript
复制
val oneTimeADayReq: PeriodicWorkRequest = PeriodicWorkRequest.Builder(
        StepCountNotificationWorker::class.java, 
        PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
        TimeUnit.MILLISECONDS).build()

在执行结束时,从RUNNINGENQUEUED的周期性工作转换,唯一的最终状态是CANCELLED

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59024161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档