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 に何かの値を保存するにはどうすればよいですか?