WorkManager की मदद से टास्क शेड्यूल करना   यह Android Jetpack का हिस्सा है.

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

लगातार चलने वाले काम के टाइप

WorkManager, तीन तरह के लगातार चलने वाले कामों को हैंडल करता है:

  • तुरंत: ऐसे टास्क जिन्हें तुरंत शुरू करके जल्द से जल्द पूरा करना होता है. इसे जल्दी पूरा किया जा सकता है.
  • लंबे समय तक चलने वाले: ऐसे टास्क जो 10 मिनट से ज़्यादा समय तक चल सकते हैं.
  • बाद में किए जा सकने वाले: शेड्यूल किए गए ऐसे टास्क जो बाद में शुरू होते हैं और समय-समय पर चल सकते हैं.

पहली इमेज में बताया गया है कि अलग-अलग तरह के लगातार चलने वाले काम एक-दूसरे से कैसे जुड़े होते हैं.

लगातार चलने वाले काम को तुरंत, लंबे समय तक या बाद में किया जा सकता है
पहला डायग्राम: लगातार चलने वाले काम के टाइप.

इसी तरह, यहां दी गई टेबल में अलग-अलग तरह के कामों के बारे में बताया गया है.

स्ट्रीम किस तरह की है समयावधि ऐक्सेस करने का तरीका
तुरंत एक बार OneTimeWorkRequest और Worker.

जल्दी काम करने के लिए, अपने OneTimeWorkRequest पर setExpedited() को कॉल करें.

लंबे समय तक चलने वाला एक बार या बार-बार WorkRequest या Worker में से कोई भी. सूचना को मैनेज करने के लिए, Worker में setForeground() को कॉल करें.
देर से चुकाने की सुविधा एक बार या बार-बार PeriodicWorkRequest और Worker.

WorkManager को सेट अप करने के तरीके के बारे में ज़्यादा जानने के लिए, अपने WorkRequests तय करना गाइड देखें.

सुविधाएं

WorkManager, आसान और बेहतर एपीआई उपलब्ध कराता है. साथ ही, इसके कई और मुख्य फ़ायदे भी हैं:

काम से जुड़े कंस्ट्रेंट

काम से जुड़ी पाबंदियों का इस्तेमाल करके, अपने काम को चलाने के लिए सबसे सही शर्तों को साफ़ तौर पर बताएं. उदाहरण के लिए, सिर्फ़ तब चलाएं, जब डिवाइस बिना शुल्क वाले नेटवर्क से कनेक्ट हो, डिवाइस इस्तेमाल में न हो या उसमें ज़रूरत के मुताबिक बैटरी हो.

बेहतर शेड्यूलिंग

WorkManager की मदद से, काम को शेड्यूल किया जा सकता है, ताकि उसे एक बार या फिर बार-बार चलाया जा सके. इसके लिए, शेड्यूल करने की सुविधा के साथ मिलने वाली विंडो का इस्तेमाल किया जाता है. टास्क को टैग और नाम भी दिया जा सकता है. इससे, यूनीक और बदले जा सकने वाले टास्क शेड्यूल किए जा सकते हैं. साथ ही, एक साथ कई टास्क को मॉनिटर या रद्द किया जा सकता है.

शेड्यूल किया गया काम, डिवाइस में मैनेज किए जाने वाले SQLite डेटाबेस में सेव किया जाता है. साथ ही, WorkManager यह पक्का करता है कि डिवाइस के रीबूट होने पर भी यह काम जारी रहे और फिर से शेड्यूल किया जाए.

इसके अलावा, WorkManager में बैटरी बचाने वाली सुविधाएं और सबसे सही तरीके इस्तेमाल किए जाते हैं. जैसे, Doze मोड. इसलिए, आपको इस बारे में चिंता करने की ज़रूरत नहीं है.

तेज़ी से काम करना

WorkManager का इस्तेमाल करके, बैकग्राउंड में तुरंत काम करने के लिए शेड्यूल किया जा सकता है. आपको ज़्यादा तेज़ी से काम करने की सुविधा का इस्तेमाल उन टास्क के लिए करना चाहिए जो उपयोगकर्ता के लिए अहम हैं और कुछ ही मिनटों में पूरे हो जाते हैं.

फिर से कोशिश करने की सुविधा के लिए नीति

कभी-कभी काम पूरा नहीं हो पाता. WorkManager, फिर से कोशिश करने की सुविधा के लिए ज़रूरी नीतियों को कॉन्फ़िगर करने की सुविधा देता है. इनमें, एक्सपोनेंशियल बैकऑफ़ नीति भी शामिल है.

टास्क को क्रम से पूरा करना

एक-दूसरे से जुड़े जटिल कामों के लिए, अलग-अलग कामों को एक साथ जोड़ें. इसके लिए, एक आसान इंटरफ़ेस का इस्तेमाल करें. इसकी मदद से, यह कंट्रोल किया जा सकता है कि कौनसे काम क्रम से और कौनसे एक साथ पूरे किए जाएं.

Kotlin


val continuation = WorkManager.getInstance(context)
    .beginUniqueWork(
        Constants.IMAGE_MANIPULATION_WORK_NAME,
        ExistingWorkPolicy.REPLACE,
        OneTimeWorkRequest.from(CleanupWorker::class.java)
    ).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
    .then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
    .then(
        if (save) {
            workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
        } else /* upload */ {
            workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
        }
    )

Java


WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();

हर टास्क के लिए, इनपुट और आउटपुट डेटा तय किया जा सकता है. एक साथ कई कामों को सिलसिलेवार तरीके से करने पर, WorkManager एक टास्क के आउटपुट डेटा को अगले टास्क में अपने-आप भेज देता है.

थ्रेड की सुविधा के साथ काम करने की बिल्ट-इन सुविधा

WorkManager, कोरूटीन और RxJava के साथ आसानी से इंटिग्रेट हो जाता है. साथ ही, अपने असिंक्रोनस एपीआई प्लग इन करने की सुविधा भी देता है.

भरोसेमंद तरीके से काम करने के लिए, WorkManager का इस्तेमाल करना

WorkManager का मकसद ऐसे कामों के लिए है जिन्हें भरोसेमंद तरीके से चलाना ज़रूरी है. भले ही, उपयोगकर्ता किसी स्क्रीन से बाहर निकल जाए, ऐप्लिकेशन बंद हो जाए या डिवाइस रीस्टार्ट हो जाए. उदाहरण के लिए:

  • बैकएंड सेवाओं को लॉग या आंकड़े भेजना.
  • समय-समय पर ऐप्लिकेशन का डेटा, सर्वर के साथ सिंक करना.

WorkManager का मकसद, बैकग्राउंड में चल रहे ऐसे काम के लिए नहीं है जिसे ऐप्लिकेशन की प्रोसेस बंद होने पर सुरक्षित तरीके से बंद किया जा सकता है. यह उन सभी कामों के लिए भी सामान्य समाधान नहीं है जिन्हें तुरंत पूरा करना ज़रूरी है. आपकी ज़रूरतों के हिसाब से कौनसा समाधान सही रहेगा, यह जानने के लिए कृपया बैकग्राउंड में प्रोसेस करने की सुविधा से जुड़ी गाइड देखें.

अन्य एपीआई से संबंध

कुछ इस्तेमाल के उदाहरणों के लिए, कोरूटीन का इस्तेमाल करने का सुझाव दिया जाता है. हालांकि, आपको इन्हें लगातार चलने वाले कामों के लिए इस्तेमाल नहीं करना चाहिए. ध्यान रखें कि कोरूटीन, एक साथ कई काम करने की सुविधा देने वाला फ़्रेमवर्क है. वहीं, WorkManager, लगातार चलने वाले काम के लिए एक लाइब्रेरी है. इसी तरह, आपको AlarmManager का इस्तेमाल सिर्फ़ घड़ियों या कैलेंडर के लिए करना चाहिए.

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

बंद किए गए एपीआई को बदलना

हमारा सुझाव है कि Android के बैकग्राउंड में शेड्यूल करने वाले सभी पुराने एपीआई के बजाय, WorkManager API का इस्तेमाल करें. इनमें FirebaseJobDispatcher, GcmNetworkManager, और Job Scheduler शामिल हैं.

शुरू करना

अपने ऐप्लिकेशन में WorkManager का इस्तेमाल शुरू करने के लिए, शुरू करने के लिए गाइड देखें.

अन्य संसाधन

WorkManager के बारे में ज़्यादा जानकारी के लिए, यहां दिए गए संसाधन देखें.

सैंपल

वीडियो

ब्लॉग