1

doWork メソッドが数値をカウントするワーカー クラスで 1 回限りの作業を実行しようとしています。I と呼びます。これは 100 回ループし、反復ごとにカウンターが増加し続けます。

この作品がネットワーク制約接続になるように制約を追加しました。

毎回カウントしたいのですが、ネットワークを閉じるとカウントが停止します。ネットワークを開いた後、以前と同じカウント値からカウントを続行したい

ネットワークを閉じて再度開くたびに、カウントは再びゼロから始まり、以前にカウンターにあった値は、ワーカーで定義したグローバル変数 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