इंटरमीडिएट वर्कर की प्रोग्रेस पर नज़र रखें

WorkManager के पास इंटरमीडिएट को सेट करने और उसे मॉनिटर करने की सुविधा उपलब्ध होती है काम करने वाले लोगों की स्थिति कैसी है. अगर ऐप्लिकेशन फ़ोरग्राउंड में है, तो यह जानकारी उपयोगकर्ता को उन एपीआई का इस्तेमाल करके भी दिखाई जा सकती है जो इसका LiveData वापस करें WorkInfo.

ListenableWorker अब इनका इस्तेमाल करता है: setProgressAsync() एपीआई की मदद से, यह किसी सामान्य प्रोग्रेस को लगातार जारी रख सकता है. ये एपीआई, डेवलपर, बीच के लेवल पर होने वाली प्रोग्रेस को सेट कर सकें, जिसे यूज़र इंटरफ़ेस (यूआई) से देखा जा सके. प्रोग्रेस को Data टाइप से दिखाया जाता है, जो प्रॉपर्टी का ऐसा कंटेनर है जिसे क्रम में लगाया जा सकता है (input और output, और समान पाबंदियों के अधीन हों).

प्रोग्रेस की जानकारी सिर्फ़ तब देखी और अपडेट की जा सकती है, जब ListenableWorker चल रहा है. ListenableWorker पर प्रोग्रेस सेट करने की कोशिश की गई एक्ज़ीक्यूशन पूरा होने के बाद, उन्हें अनदेखा कर दिया जाता है. यह भी देखा जा सकता है कि getWorkInfoBy…() या getWorkInfoBy…LiveData() तरीकों का इस्तेमाल करना होगा. ये तरीके WorkInfo, जिसमें एक नई getProgress() तरीका जो Data दिखाता है.

प्रोग्रेस अपडेट करें

ListenableWorker का इस्तेमाल करने वाले Java डेवलपर के लिए या Worker, setProgressAsync() एपीआई, ListenableFuture<Void> दिखाता है; अपडेट की प्रोग्रेस एसिंक्रोनस है, दिया जाता है, क्योंकि अपडेट प्रोसेस में प्रोग्रेस की जानकारी को डेटाबेस में सेव करना शामिल होता है. Kotlin में, CoroutineWorker का इस्तेमाल किया जा सकता है ऑब्जेक्ट का setProgress() एक्सटेंशन फ़ंक्शन का इस्तेमाल करता है.

इस उदाहरण में, आसान ProgressWorker दिखाया गया है. Worker अपनी प्रोग्रेस को इस पर सेट करता है शुरू होने पर 0 दिखेगा और पूरा होने पर प्रोग्रेस की वैल्यू 100 पर सेट हो जाएगी.

Kotlin

import android.content.Context
import androidx.work.CoroutineWorker
import androidx.work.Data
import androidx.work.WorkerParameters
import kotlinx.coroutines.delay

class ProgressWorker(context: Context, parameters: WorkerParameters) :
    CoroutineWorker(context, parameters) {

    companion object {
        const val Progress = "Progress"
        private const val delayDuration = 1L
    }

    override suspend fun doWork(): Result {
        val firstUpdate = workDataOf(Progress to 0)
        val lastUpdate = workDataOf(Progress to 100)
        setProgress(firstUpdate)
        delay(delayDuration)
        setProgress(lastUpdate)
        return Result.success()
    }
}

Java

import android.content.Context;
import androidx.annotation.NonNull;
import androidx.work.Data;
import androidx.work.Worker;
import androidx.work.WorkerParameters;

public class ProgressWorker extends Worker {

    private static final String PROGRESS = "PROGRESS";
    private static final long DELAY = 1000L;

    public ProgressWorker(
        @NonNull Context context,
        @NonNull WorkerParameters parameters) {
        super(context, parameters);
        // Set initial progress to 0
        setProgressAsync(new Data.Builder().putInt(PROGRESS, 0).build());
    }

    @NonNull
    @Override
    public Result doWork() {
        try {
            // Doing work.
            Thread.sleep(DELAY);
        } catch (InterruptedException exception) {
            // ... handle exception
        }
        // Set progress to 100 after you are done doing your work.
        setProgressAsync(new Data.Builder().putInt(PROGRESS, 100).build());
        return Result.success();
    }
}

प्रोग्रेस पर नज़र रखी जा रही है

प्रोग्रेस की जानकारी देखना भी आसान है. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए getWorkInfoBy…() या getWorkInfoBy…LiveData() और WorkInfo का रेफ़रंस पाएं.

यहां एक उदाहरण दिया गया है, जिसमें getWorkInfoByIdLiveData एपीआई का इस्तेमाल किया जाता है.

Kotlin

WorkManager.getInstance(applicationContext)
    // requestId is the WorkRequest id
    .getWorkInfoByIdLiveData(requestId)
    .observe(observer, Observer { workInfo: WorkInfo? ->
            if (workInfo != null) {
                val progress = workInfo.progress
                val value = progress.getInt(Progress, 0)
                // Do something with progress information
            }
    })

Java

WorkManager.getInstance(getApplicationContext())
     // requestId is the WorkRequest id
     .getWorkInfoByIdLiveData(requestId)
     .observe(lifecycleOwner, new Observer<WorkInfo>() {
             @Override
             public void onChanged(@Nullable WorkInfo workInfo) {
                 if (workInfo != null) {
                     Data progress = workInfo.getProgress();
                     int value = progress.getInt(PROGRESS, 0)
                     // Do something with progress
             }
      }
});

Worker ऑब्जेक्ट को मॉनिटर करने से जुड़े ज़्यादा दस्तावेज़ के लिए, इसे पढ़ें काम की स्थितियां और काम की निगरानी करना.