【问题标题】:PeriodicWorkRequest Does not Work No Matter WhatPeriodicWorkRequest 无论如何都不起作用
【发布时间】:2019-11-25 01:36:15
【问题描述】:

PeriodicWorkRequest 根本不起作用。如您所见,我已将重复间隔设置为至少 15 分钟。它被排队,然后显示正在运行,但就是这样。什么也没发生,我什至等了 30 分钟!这只是行不通。但是,OneTimeWorkRequest 工作得非常好,没有任何问题,但在 PeriodicWorkRequest 方面却没有运气。请看下面我的代码:

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
                    }
                }
            }
        }
    }

我也试过设置弹性间隔:

 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 版本。没有运气。我正在使用 Google Pixel 3a,targetSdkVersion 是 29。有人可以帮忙吗?谢谢你。

【问题讨论】:

    标签: android kotlin android-workmanager workmanagers


    【解决方案1】:

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

    val oneTimeADayReq: PeriodicWorkRequest = PeriodicWorkRequest.Builder(
            StepCountNotificationWorker::class.java, 
            PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
            TimeUnit.MILLISECONDS).build()
    

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

    【讨论】:

    • @pfmagii 哇!你说的对!我到底是多么想念那个哈哈!好的,我将对此进行测试并告诉您!非常感谢你:)))
    猜你喜欢
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    相关资源
    最近更新 更多