जब आपको ऐसे टास्क पूरे करने हों जो ऐप्लिकेशन के बंद होने के बाद भी चलते रहें, तो हमारा सुझाव है कि 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, मिलते-जुलते एपीआई से कैसे जुड़ा है. इस जानकारी से, आपको अपने ऐप्लिकेशन की ज़रूरतों के हिसाब से सही एपीआई चुनने में मदद मिल सकती है.
एपीआई | इनके लिए सुझाव दिया गया | 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