लंबे समय तक चलने वाला टास्क Android Jetpack का हिस्सा.
ऐप्लिकेशन को फिर से चालू करने और सिस्टम को रीबूट करने पर भी, काम जारी रहता है. हमारा सुझाव है कि लगातार चलने वाले टास्क के लिए, WorkManager का इस्तेमाल करें. ज़्यादातर बैकग्राउंड प्रोसेसिंग, लगातार चलने वाले टास्क के ज़रिए सबसे अच्छी तरह से की जा सकती है. इसलिए, WorkManager को बैकग्राउंड प्रोसेसिंग के लिए सबसे ज़्यादा इस्तेमाल करने का सुझाव दिया जाता है.
एक जैसा बना रहने वाला काम
WorkManager, तीन तरह के लगातार चलने वाले टास्क को हैंडल करता है:
- तुरंत: ऐसे टास्क जिन्हें तुरंत शुरू करना और जल्द से जल्द पूरा करना ज़रूरी है. इसे जल्दी पूरा किया जा सकता है.
- लंबे समय तक चलने वाले टास्क: ऐसे टास्क जिन्हें पूरा होने में 10 मिनट से ज़्यादा समय लग सकता है.
- टाले जा सकने वाले टास्क: शेड्यूल किए गए ऐसे टास्क जो बाद में शुरू होते हैं और समय-समय पर चलते हैं.
पहली इमेज में बताया गया है कि अलग-अलग तरह के परसिस्टेंट वर्क एक-दूसरे से कैसे जुड़े होते हैं.
इसी तरह, यहां दी गई टेबल में अलग-अलग तरह के काम के बारे में बताया गया है.
टाइप | समय-समय पर होने वाली | ऐक्सेस करने का तरीका |
---|---|---|
तुरंत | एक बार | OneTimeWorkRequest और Worker . हाई-प्रायाॅरिटी वाले काम के लिए, अपने OneTimeWorkRequest पर setExpedited() को कॉल करें. |
Long Running | एक बार या समय-समय पर | कोई भी WorkRequest या Worker . सूचना को मैनेज करने के लिए, वर्कर में setForeground() को कॉल करें. |
डिफ़र किया जा सकने वाला | एक बार या समय-समय पर | PeriodicWorkRequest और Worker . |
WorkManager को सेट अप करने के तरीके के बारे में ज़्यादा जानने के लिए, WorkRequest तय करना गाइड देखें.
WorkManager से जुड़ी सुविधाएं
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 - MAD Skills, वीडियो सीरीज़
- 2018 के Android Dev Summit में, WorkManager के साथ काम करना
- 2019 के Android Dev Summit में WorkManager: Beyond the basics