1

我试图对工人类执行一次工作,其中 doWork 方法将只计算一个数字 Call it I。这将循环 100 次,并且在每次迭代中,计数器将继续增长。

我为这项工作添加了一个约束,即网络约束连接。

我想每次都计数,如果我关闭网络,计数将停止。打开网络后,我希望计数从以前的相同计数值继续工作

每次我关闭网络并再次打开它时,计数再次从零开始,并且之前计数器中的值没有保存在我在 worker 中定义的全局变量 I 中。这就像不采用那里定义的最后一个值。

我的工人阶级

class WorkerClass(appContext: Context, workerParams: WorkerParameters):
    Worker(appContext, workerParams) {
    var i:Int=0
     override fun doWork(): Result {

         while (i < 100) {
             if (this.isStopped){
                 Log.i("Hello","I Stopped A")
                     return Result.retry()
             }
             i++
             Log.i("Hello", "The value of counter is :"+i.toString())
             Thread.sleep(200)
         }
        return Result.success()
     }
}

我的简单工作创建者:(传递了一个数据,我现在不使用它,因此您可以忽略它。

 val constrints=Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val k = sceondTxt.text.toString()
        val data=Data.Builder()
        data.putString("Counter Value",k)
        val oneReq:WorkRequest= OneTimeWorkRequestBuilder<WorkerClass>().setConstraints(constrints).setInputData(data.build())
            .build()

正如你所看到的,我将 I 定义为 Integer,并且工作的每一次迭代 I 都在增长。但是当我关闭连接并再次打开它时,我再次为 0,并且没有从上次运行的 doWork 中保存。

i 的定义不是全局的吗?系统不会将存储在 doWork 中的最后一个值 I 用于以后的迭代?

如何保存我的 doWork 中某些东西的值以便以后再次使用它(在满足约束之后)而不是作为默认值?

4

0 回答 0