ऐप्लिकेशन को अक्सर एक समय में एक से ज़्यादा काम करने पड़ते हैं. Android API, आपको ऐसा करने के कई अलग-अलग तरीके उपलब्ध कराते हैं. सही विकल्प चुनना बहुत ज़रूरी है. ऐसा हो सकता है कि कोई विकल्प एक स्थिति के लिए सही हो, लेकिन दूसरी स्थिति के लिए बहुत गलत हो. गलत एपीआई चुनने से, आपके ऐप्लिकेशन की परफ़ॉर्मेंस या संसाधनों के इस्तेमाल की क्षमता पर असर पड़ सकता है. इससे बैटरी जल्दी खत्म हो सकती है और उपयोगकर्ता के डिवाइस की परफ़ॉर्मेंस खराब हो सकती है. कुछ मामलों में, गलत तरीका चुनने से आपके ऐप्लिकेशन को Play Store पर लिस्ट होने से रोका जा सकता है.
इस दस्तावेज़ में, आपके लिए उपलब्ध अलग-अलग विकल्पों के बारे में बताया गया है. साथ ही, आपकी स्थिति के हिसाब से सही विकल्प चुनने में मदद की गई है.
शब्दावली
बैकग्राउंड टास्क से जुड़ी कुछ अहम शर्तों का इस्तेमाल, कई अलग-अलग तरीकों से किया जा सकता है. इसलिए, यह ज़रूरी है कि हम अपनी शर्तों को तय करें.
अगर कोई ऐप्लिकेशन बैकग्राउंड में चल रहा है, तो सिस्टम उस पर कई पाबंदियां लगाता है. (उदाहरण के लिए, ज़्यादातर मामलों में, बैकग्राउंड में मौजूद कोई ऐप्लिकेशन, फ़ोरग्राउंड सेवाएं लॉन्च नहीं कर सकता.)
इस दस्तावेज़ के लिए, हम "टास्क" शब्द का इस्तेमाल करेंगे. इसका मतलब है कि कोई ऐप्लिकेशन अपने मुख्य वर्कफ़्लो से बाहर कोई कार्रवाई कर रहा है. इस बारे में सभी को एक जैसी जानकारी देने के लिए, हमने टास्क को तीन मुख्य कैटगरी में बांटा है: एसिंक्रोनस टास्क, टास्क शेड्यूल करने वाले एपीआई, और फ़ोरग्राउंड सेवाएं.
सही विकल्प चुनना
ज़्यादातर मामलों में, अपने टास्क के लिए सही एपीआई का पता लगाया जा सकता है. इसके लिए, आपको यह पता लगाना होगा कि टास्क किस कैटगरी (एसिंक्रोनस टास्क, टास्क शेड्यूल करने वाले एपीआई या फ़ोरग्राउंड सेवाएं) में आता है.
अगर आपको अब भी कोई संदेह है, तो हमारे उपलब्ध कराए गए फ़्लो चार्ट का इस्तेमाल करें. इनसे आपको फ़ैसला लेने में मदद मिलेगी. इनमें से हर विकल्प के बारे में ज़्यादा जानकारी, इस दस्तावेज़ में आगे दी गई है.
बैकग्राउंड टास्क के लिए, दो मुख्य स्थितियों पर ध्यान देना ज़रूरी है:
- ऐप्लिकेशन दिखने के दौरान, उपयोगकर्ता ने कोई टास्क शुरू किया हो
- टास्क को किसी इवेंट के जवाब में शुरू किया जाता है. यह इवेंट, इंटरनल या एक्सटर्नल हो सकता है
इन दोनों स्थितियों के अपने-अपने डिसिज़न ट्री होते हैं.
एसिंक्रोनस तरीके से काम करना
कई मामलों में, ऐप्लिकेशन को फ़ोरग्राउंड में चलने के दौरान, एक साथ कई काम करने की ज़रूरत होती है. उदाहरण के लिए, हो सकता है कि किसी ऐप्लिकेशन को कोई ऐसी कैलकुलेशन करनी हो जिसमें ज़्यादा समय लगता हो. अगर यह यूज़र इंटरफ़ेस (यूआई) थ्रेड पर कैलकुलेशन करता है, तो कैलकुलेशन पूरा होने तक उपयोगकर्ता, ऐप्लिकेशन के साथ इंटरैक्ट नहीं कर पाएगा. इससे एएनआर वाली गड़बड़ी हो सकती है. ऐसे मामले में, ऐप्लिकेशन को एसिंक्रोनस वर्क विकल्प का इस्तेमाल करना चाहिए.
एसिंक्रोनस वर्क के सामान्य विकल्पों में, Kotlin कोरूटीन और Java थ्रेड शामिल हैं. ज़्यादा जानकारी के लिए, एसिंक्रोनस वर्क से जुड़ा दस्तावेज़ पढ़ें. यह ध्यान रखना ज़रूरी है कि बैकग्राउंड टास्क एपीआई के उलट, एसिंक्रोनस टास्क के पूरा होने की गारंटी नहीं होती. ऐसा तब होता है, जब ऐप्लिकेशन किसी मान्य लाइफ़साइकल स्टेज में न हो. उदाहरण के लिए, अगर ऐप्लिकेशन फ़ोरग्राउंड से हट जाता है.
टास्क शेड्यूल करने वाले एपीआई
टास्क शेड्यूल करने वाले एपीआई, ज़्यादा सुविधाजनक विकल्प होते हैं. इनका इस्तेमाल तब किया जाता है, जब आपको ऐसे टास्क करने हों जो उपयोगकर्ता के ऐप्लिकेशन छोड़ने के बाद भी जारी रहें. ज़्यादातर मामलों में, बैकग्राउंड टास्क चलाने के लिए सबसे अच्छा विकल्प WorkManager का इस्तेमाल करना है. हालांकि, कुछ मामलों में प्लैटफ़ॉर्म JobScheduler एपीआई का इस्तेमाल करना सही हो सकता है.
WorkManager एक बेहतरीन लाइब्रेरी है. इसकी मदद से, अपनी ज़रूरत के हिसाब से आसान या मुश्किल टास्क सेट अप किए जा सकते हैं. WorkManager का इस्तेमाल करके, टास्क को किसी खास समय पर चलाने के लिए शेड्यूल किया जा सकता है. इसके अलावा, टास्क को चलाने की शर्तें भी तय की जा सकती हैं. टास्क की चेन भी सेट अप की जा सकती हैं, ताकि हर टास्क बारी-बारी से चले और अपने नतीजे अगले टास्क को पास करे. उपलब्ध सभी विकल्पों को समझने के लिए, WorkManager की सुविधाओं की सूची पढ़ें.
बैकग्राउंड टास्क के कुछ सबसे सामान्य उदाहरणों में ये शामिल हैं:
- समय-समय पर सर्वर से डेटा फ़ेच करना
- सेंसर डेटा फ़ेच करना (उदाहरण के लिए, स्टेप काउंटर का डेटा)
- समय-समय पर जगह की जानकारी का डेटा पाना. इसके लिए, आपको Android 10 या इसके बाद के वर्शन पर
ACCESS_BACKGROUND_LOCATIONकी अनुमति देनी होगी - कॉन्टेंट ट्रिगर के आधार पर कॉन्टेंट अपलोड करना. जैसे, कैमरे से ली गई फ़ोटो
फ़ोरग्राउंड सेवाएं
फ़ोरग्राउंड सेवाएं, ऐसे टास्क तुरंत चलाने का एक बेहतरीन तरीका है जिन्हें बीच में नहीं रोका जाना चाहिए. हालांकि, फ़ोरग्राउंड सेवाएं डिवाइस पर ज़्यादा लोड डाल सकती हैं. कभी-कभी, इनसे निजता और सुरक्षा पर भी असर पड़ता है. इन वजहों से, सिस्टम इस बात पर कई पाबंदियां लगाता है कि ऐप्लिकेशन, फ़ोरग्राउंड सेवाओं का इस्तेमाल कैसे और कब कर सकते हैं. उदाहरण के लिए, फ़ोरग्राउंड सेवा को उपयोगकर्ता को दिखना चाहिए. साथ ही, ज़्यादातर मामलों में ऐप्लिकेशन, बैकग्राउंड में होने पर फ़ोरग्राउंड सेवाएं लॉन्च नहीं कर सकते. ज़्यादा जानकारी के लिए, फ़ोरग्राउंड सेवाओं का दस्तावेज़ देखें.
फ़ोरग्राउंड सेवा बनाने के दो तरीके हैं. आपके पास अपनी Service का एलान करने का विकल्प है. साथ ही, Service.startForeground() को कॉल करके, यह बताया जा सकता है कि सेवा एक फ़ोरग्राउंड सेवा है. इसके अलावा, फ़ोरग्राउंड सेवा बनाने के लिए WorkManager का इस्तेमाल किया जा सकता है. इसके बारे में, लंबे समय तक चलने वाले वर्कर के लिए सहायता में बताया गया है.
हालांकि, यह जानना ज़रूरी है कि WorkManager से बनाई गई फ़ोरग्राउंड सेवा पर भी वे सभी पाबंदियां लागू होती हैं जो किसी अन्य फ़ोरग्राउंड सेवा पर लागू होती हैं.
WorkManager, फ़ोरग्राउंड सेवा को आसानी से बनाने के लिए कुछ सुविधाजनक एपीआई उपलब्ध कराता है.
अन्य एपीआई
सिस्टम, अन्य एपीआई उपलब्ध कराता है. इन्हें इस्तेमाल के ज़्यादा खास उदाहरणों के लिए, बेहतर परफ़ॉर्म करने के लिए डिज़ाइन किया गया है. अगर आपके इस्तेमाल के उदाहरण के लिए कोई अन्य एपीआई मौजूद है, तो हमारा सुझाव है कि आप फ़ोरग्राउंड सेवा के बजाय उस एपीआई का इस्तेमाल करें. इससे आपके ऐप्लिकेशन की परफ़ॉर्मेंस बेहतर होगी. फ़ोरग्राउंड सेवा के टाइप से जुड़े दस्तावेज़ में बताया गया है कि फ़ोरग्राउंड सेवा के किसी टाइप के बजाय, कौनसा एपीआई इस्तेमाल करना बेहतर विकल्प है.
अन्य एपीआई इस्तेमाल करने के कुछ सबसे सामान्य उदाहरण यहां दिए गए हैं:
- डेटा सिंक करने वाली फ़ोरग्राउंड सेवा बनाने के बजाय, उपयोगकर्ता के शुरू किए गए डेटा ट्रांसफ़र का इस्तेमाल करके, बड़ी फ़ाइलें डाउनलोड या अपलोड करना
- ब्लूटूथ से जोड़ने और डेटा ट्रांसफ़र करने के लिए, कनेक्ट किए गए डिवाइस की फ़ोरग्राउंड सेवा के बजाय, कंपैनियन डिवाइस मैनेजर का इस्तेमाल करना
- वीडियो चलाने के लिए, मीडिया-प्लेबैक फ़ोरग्राउंड सेवा बनाने के बजाय, पिक्चर में पिक्चर मोड का इस्तेमाल करना
उपयोगकर्ता की ओर से शुरू किए गए टास्क
अगर किसी ऐप्लिकेशन को बैकग्राउंड में टास्क पूरे करने हैं और उपयोगकर्ता ने ऐप्लिकेशन के दिखने के दौरान कार्रवाई शुरू की है, तो सही तरीका जानने के लिए इन सवालों के जवाब दें.
क्या ऐप्लिकेशन के बैकग्राउंड में होने पर भी टास्क को जारी रखना ज़रूरी है?
अगर ऐप्लिकेशन के बैकग्राउंड में होने पर टास्क को जारी रखने की ज़रूरत नहीं है, तो आपको एसिंक्रोनस वर्क का इस्तेमाल करना चाहिए. एसिंक्रोनस काम करने के लिए कई विकल्प मौजूद हैं. यह समझना ज़रूरी है कि अगर ऐप्लिकेशन बैकग्राउंड में चला जाता है, तो ये सभी विकल्प काम करना बंद कर देते हैं. (ऐप्लिकेशन बंद होने पर भी ये टास्क रुक जाते हैं.) उदाहरण के लिए, हो सकता है कि कोई सोशल मीडिया ऐप्लिकेशन अपने कॉन्टेंट फ़ीड को रीफ़्रेश करना चाहे. हालांकि, अगर उपयोगकर्ता स्क्रीन से हट जाता है, तो उसे यह कार्रवाई पूरी करने की ज़रूरत नहीं होगी.
क्या टास्क को रोकने या उसमें रुकावट डालने से, उपयोगकर्ता को खराब अनुभव मिलेगा?
यह ध्यान रखना ज़रूरी है कि किसी टास्क को पोस्टपोन या रद्द करने से, उपयोगकर्ता अनुभव पर असर पड़ेगा या नहीं. उदाहरण के लिए, अगर किसी ऐप्लिकेशन को अपनी ऐसेट अपडेट करनी हैं, तो उपयोगकर्ता को शायद यह पता न चले कि यह प्रोसेस तुरंत हो रही है या आधी रात को, जब डिवाइस रीचार्ज हो रहा है. ऐसे मामलों में, आपको बैकग्राउंड में काम करने के विकल्पों का इस्तेमाल करना चाहिए.
क्या यह कोई छोटा और ज़रूरी टास्क है?
अगर टास्क में देरी नहीं की जा सकती और वह जल्दी पूरा हो जाएगा, तो shortService टाइप वाली फ़ोरग्राउंड सेवा का इस्तेमाल किया जा सकता है. इन सेवाओं को अन्य फ़ोरग्राउंड सेवाओं की तुलना में बनाना आसान होता है. साथ ही, इनके लिए ज़्यादा अनुमतियों की ज़रूरत नहीं होती. हालांकि, शॉर्ट सर्विस तीन मिनट में पूरी होनी चाहिए.
क्या सिर्फ़ इस काम के लिए कोई दूसरा एपीआई उपलब्ध है?
अगर टास्क उपयोगकर्ता को दिखता है, तो हो सकता है कि फ़ोरग्राउंड सेवा का इस्तेमाल करना सही समाधान हो. ये सेवाएं शुरू होने के बाद लगातार चलती रहती हैं. इसलिए, ये सेवाएं तब एक अच्छा विकल्प होती हैं, जब टास्क में रुकावट आने से उपयोगकर्ता को खराब अनुभव मिलता है. उदाहरण के लिए, कसरत को ट्रैक करने वाला कोई ऐप्लिकेशन, जगह की जानकारी वाले सेंसर का इस्तेमाल कर सकता है. इससे उपयोगकर्ता, मैप पर जॉगिंग का अपना रूट रिकॉर्ड कर सकते हैं. आप इसे बैकग्राउंड में काम करने के विकल्प के साथ नहीं करना चाहेंगे, क्योंकि अगर टास्क को रोक दिया गया, तो ट्रैकिंग तुरंत बंद हो जाएगी. ऐसे में, फ़ोरग्राउंड सेवा का इस्तेमाल करना सबसे सही रहता है.
हालांकि, फ़ोरग्राउंड सेवाएं डिवाइस के कई संसाधनों का इस्तेमाल कर सकती हैं. इसलिए, सिस्टम इस बात पर कई पाबंदियां लगाता है कि उन्हें कब और कैसे इस्तेमाल किया जा सकता है. कई मामलों में, फ़ोरग्राउंड सेवा का इस्तेमाल करने के बजाय, किसी अन्य एपीआई का इस्तेमाल किया जा सकता है. इससे आपको कम परेशानी होगी. उदाहरण के लिए, अगर आपके ऐप्लिकेशन को उपयोगकर्ता के किसी खास जगह पर पहुंचने पर कोई कार्रवाई करनी है, तो सबसे अच्छा विकल्प यह है कि आप फ़ोरग्राउंड सेवा की मदद से उपयोगकर्ता की जगह की जानकारी ट्रैक करने के बजाय, जियोफ़ेंस एपीआई का इस्तेमाल करें.
किसी इवेंट के जवाब में टास्क
कभी-कभी किसी ऐप्लिकेशन को ट्रिगर के जवाब में, बैकग्राउंड में काम करना पड़ता है. जैसे:
- ब्रॉडकास्ट मैसेज
- Firebase क्लाउड से मैसेज (FCM)
- ऐप्लिकेशन से सेट किए गए अलार्म
यह कोई बाहरी ट्रिगर हो सकता है, जैसे कि एफ़सीएम मैसेज. इसके अलावा, यह ऐप्लिकेशन के सेट किए गए अलार्म की वजह से भी हो सकता है. उदाहरण के लिए, किसी गेम को FCM मैसेज मिल सकता है, जिसमें कुछ ऐसेट को अपडेट करने के लिए कहा गया हो.
अगर आपको लगता है कि टास्क कुछ ही सेकंड में पूरा हो जाएगा, तो टास्क को पूरा करने के लिए एसिंक्रोनस वर्क का इस्तेमाल करें. सिस्टम आपके ऐप्लिकेशन को ऐसे टास्क करने के लिए कुछ सेकंड की अनुमति देगा. भले ही, आपका ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
अगर टास्क पूरा होने में कुछ सेकंड से ज़्यादा समय लगेगा, तो उसे पूरा करने के लिए फ़ोरग्राउंड सेवा शुरू करना सही रहेगा. अगर आपका ऐप्लिकेशन फ़िलहाल बैकग्राउंड में है, तो भी उसे फ़ोरग्राउंड सेवा शुरू करने की अनुमति मिल सकती है. ऐसा तब होता है, जब उपयोगकर्ता ने टास्क को ट्रिगर किया हो और वह बैकग्राउंड में शुरू होने से जुड़ी पाबंदियों से छूट की मंज़ूरी वाली कैटगरी में से किसी एक में आता हो. उदाहरण के लिए, अगर किसी ऐप्लिकेशन को ज़्यादा प्राथमिकता वाला FCM मैसेज मिलता है, तो उसे फ़ोरग्राउंड सेवा शुरू करने की अनुमति मिल जाती है. भले ही, वह ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
अगर टास्क को पूरा होने में कुछ सेकंड से ज़्यादा समय लगेगा, तो टास्क शेड्यूल करने वाले एपीआई का इस्तेमाल करें.