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