WorkManager के साथ टास्क शेड्यूल करना   Android Jetpack का हिस्सा.

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

एक जैसा बना रहने वाला काम

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

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

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

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

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

Type अवधि ऐक्सेस करने का तरीका
तुरंत एक बार OneTimeWorkRequest और Worker.

हाई-प्रायाॅरिटी वाले काम के लिए, अपने OneTimeWorkRequest पर setExpedited() को कॉल करें.

Long Running एक बार या समय-समय पर कोई भी WorkRequest या Worker. सूचना को मैनेज करने के लिए, वर्कर में setForeground() को कॉल करें.
डिफ़र किया जा सकने वाला एक बार या समय-समय पर PeriodicWorkRequest और Worker.

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

सुविधाएं

WorkManager, एपीआई को आसान और ज़्यादा सुसंगत बनाने के साथ-साथ कई अन्य फ़ायदे भी देता है:

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

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

अपॉइंटमेंट शेड्यूल करने की बेहतर सुविधा

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

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

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

हाई-प्रायाॅरिटी वाला काम

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, Coroutines और RxJava के साथ बिना किसी रुकावट के काम करता है. साथ ही, यह अपने एसिंक्रोनस एपीआई प्लग इन करने की सुविधा देता है.

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

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

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

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

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

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

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

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

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

शुरू करना

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

अन्य संसाधन

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

सैंपल

वीडियो

ब्लॉग