बैकग्राउंड से गतिविधियां शुरू करने पर पाबंदियां

Android 10 (एपीआई लेवल 29) और उसके बाद के वर्शन में, ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान, गतिविधियां शुरू करने के समय पर पाबंदियां लगाई गई हैं. इन पाबंदियों से, उपयोगकर्ता को रुकावटों को कम करने में मदद मिलती है. साथ ही, वे स्क्रीन पर दिखाए जा रहे कॉन्टेंट को बेहतर तरीके से कंट्रोल कर सकते हैं.

इस गाइड में, बैकग्राउंड से गतिविधियां शुरू करने के विकल्प के तौर पर सूचनाओं के बारे में बताया गया है. इसमें उन खास मामलों की सूची भी दी गई है जिन पर पाबंदी लागू नहीं होती.

इसके बजाय सूचनाएं दिखाएं

ज़्यादातर मामलों में, बैकग्राउंड में चल रहे ऐप्लिकेशन को समय के हिसाब से सूचनाएं दिखानी चाहिए, ताकि उपयोगकर्ता को सीधे तौर पर कोई गतिविधि शुरू करने के बजाय, ज़रूरी जानकारी दी जा सके. ऐसी सूचनाओं में, आने वाले फ़ोन कॉल या चालू अलार्म घड़ी को मैनेज करना शामिल है.

सूचना-आधारित इस सूचना और रिमाइंडर वाले सिस्टम से उपयोगकर्ताओं को कई फ़ायदे मिलते हैं:

  • डिवाइस का इस्तेमाल करते समय, उपयोगकर्ता को हेड-अप सूचना दिखती है. इससे वह जवाब दे सकता है. उपयोगकर्ता अपना मौजूदा संदर्भ बनाए रखता है. साथ ही, स्क्रीन पर दिखने वाली कॉन्टेंट पर उसका कंट्रोल होता है.
  • समय के हिसाब से मिलने वाली सूचनाओं के लिए, उपयोगकर्ता के परेशान न करें नियमों का पालन किया जाता है. उदाहरण के लिए, 'परेशान न करें' मोड चालू होने पर, उपयोगकर्ता सिर्फ़ कुछ खास संपर्कों या बार-बार कॉल करने वाले लोगों को कॉल करने की अनुमति दे सकते हैं.
  • डिवाइस की स्क्रीन बंद होने पर, फ़ुल-स्क्रीन इंटेंट तुरंत लॉन्च हो जाता है.
  • डिवाइस की सेटिंग स्क्रीन पर, उपयोगकर्ता यह देख सकता है कि किन ऐप्लिकेशन ने हाल ही में सूचनाएं भेजी हैं. इनमें, सूचना देने वाले खास चैनलों से भेजी गई सूचनाएं भी शामिल हैं. इस स्क्रीन से, उपयोगकर्ता सूचना पाने की सेटिंग को कंट्रोल कर सकता है.

ऐप्लिकेशन कब गतिविधियां शुरू कर सकते हैं

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

  • ऐप्लिकेशन में कोई विंडो दिख रही हो, जैसे कि फ़ोरग्राउंड में कोई गतिविधि.
  • ऐप्लिकेशन में फ़ोरग्राउंड टास्क के बैक स्टैक में कोई गतिविधि शामिल है.
  • ऐप्लिकेशन में, हाल ही की स्क्रीन पर मौजूद किसी मौजूदा टास्क के बैक स्टैक में कोई गतिविधि हो.

  • ऐप्लिकेशन में कोई ऐसी गतिविधि है जो हाल ही में शुरू हुई है.

  • हाल ही में, finish() नाम के ऐप्लिकेशन पर कोई गतिविधि हुई है. यह सिर्फ़ तब लागू होता है, जब finish() को कॉल किए जाने के समय, ऐप्लिकेशन में फ़ोरग्राउंड में कोई ऐक्टिविटी हो या फ़ोरग्राउंड टास्क के बैक स्टैक में कोई ऐक्टिविटी हो.

  • ऐप्लिकेशन में इनमें से कोई एक सेवा है, जो सिस्टम से जुड़ी है. इन सेवाओं के लिए, यूज़र इंटरफ़ेस (यूआई) लॉन्च करना पड़ सकता है.

  • ऐप्लिकेशन में एक ऐसी सेवा है जो किसी दूसरे ऐप्लिकेशन से बंधी है. यह ऐप्लिकेशन, बैकग्राउंड में गतिविधियां शुरू करने के लिए, दिखना चाहिए.

  • ऐप्लिकेशन को सिस्टम से सूचना PendingIntent मिलती है. सेवाओं और ब्रॉडकास्ट रिसीवर के लिए, अगर इंटेंट भेजे जाने के बाद भी वे प्रोसेस नहीं हो पाते हैं, तो ऐप्लिकेशन कुछ सेकंड के लिए गतिविधियां शुरू कर सकता है.

  • ऐप्लिकेशन को PendingIntent मिलता है, जिसे किसी दूसरे दिखने वाले ऐप्लिकेशन से भेजा जाता है.

  • ऐप्लिकेशन को सिस्टम ब्रॉडकास्ट मिलता है, जहां ऐप्लिकेशन को यूज़र इंटरफ़ेस (यूआई) लॉन्च करना होता है. उदाहरण के लिए, ACTION_NEW_OUTGOING_CALL और SECRET_CODE_ACTION. ब्रॉडकास्ट भेजने के कुछ सेकंड बाद, ऐप्लिकेशन कुछ गतिविधियां शुरू कर सकता है.

  • ऐप्लिकेशन को CompanionDeviceManager एपीआई की मदद से, कंपैनियन हार्डवेयर डिवाइस से जोड़ा गया है. इस एपीआई की मदद से, ऐप्लिकेशन उन कार्रवाइयों के जवाब में गतिविधियां शुरू कर सकता है जो उपयोगकर्ता, जोड़े गए डिवाइस पर करता है.

  • यह ऐप्लिकेशन, डिवाइस नीति नियंत्रक है, जो डिवाइस के मालिक मोड में चल रहा है. इस्तेमाल के उदाहरणों में, पूरी तरह से मैनेज किए जाने वाले एंटरप्राइज़ डिवाइस के साथ-साथ खास डिवाइस शामिल हैं. जैसे, डिजिटल साइनबोर्ड और कीऑस्क.

  • उपयोगकर्ता ने ऐप्लिकेशन को SYSTEM_ALERT_WINDOW अनुमति दी है.

PendingIntents से गतिविधियां शुरू करने के लिए, ऑप्ट-इन करना ज़रूरी है

सूची में दी गई स्थितियों के आधार पर, अनजाने में होने वाली गतिविधि शुरू होने की अनुमति देने से बचने के लिए, Android 14 में आपको साफ़ तौर पर जानकारी देने वाले एपीआई उपलब्ध कराए गए हैं. इनकी मदद से, गतिविधि शुरू होने पर ऐप्लिकेशन अनुमतियां देने की अनुमति में ऑप्ट इन या ऑप्ट आउट किया जा सकता है.

Android 15 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, डिफ़ॉल्ट रूप से अपने बनाए गए PendingIntents को बैकग्राउंड में गतिविधि लॉन्च करने (बीएएल) की अनुमतियां नहीं देंगे. साफ़ तौर पर ऑप्ट-इन करना ज़रूरी है. ऐसा करने के लिए, ये विकल्प उपलब्ध हैं. ये विकल्प इस बात पर निर्भर करते हैं कि ऐप्लिकेशन PendingIntents भेज रहा है या बना रहा है.

मंज़ूरी बाकी इंटेंट की टेबल
पहली इमेज: बैकग्राउंड में गतिविधि शुरू करने के लिए फ़ैसला लेने का फ़्लो.

PendingIntent भेजने वाले के ज़रिए

Android 14 या उसके बाद के वर्शन को टारगेट करने वाले ऐसे ऐप्लिकेशन जो PendingIntent शुरू करना चाहते हैं उन्हें

  • दी गई शर्तों को पूरा करें और
  • उन अपवादों के आधार पर, बैकग्राउंड में गतिविधि शुरू करने की अनुमति देने के लिए ऑप्ट इन करें

यह ऑप्ट-इन सिर्फ़ तब होना चाहिए, जब ऐप्लिकेशन डेवलपर को पता हो कि ऐप्लिकेशन कोई गतिविधि शुरू करने वाला है.

ऑप्ट इन करने के लिए, ऐप्लिकेशन को PendingIntent.send() या इससे मिलते-जुलते तरीकों में, setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) के साथ ActivityOptions बंडल को पास करना होगा.

PendingIntent के क्रिएटर की ओर से

Android 15 या उसके बाद के वर्शन को टारगेट करने वाले ऐसे ऐप्लिकेशन जो PendingIntent बनाते हैं उन्हें अब बैकग्राउंड गतिविधि को लॉन्च करने की अनुमति देने के लिए, साफ़ तौर पर ऑप्ट-इन करना होगा. ऐसा तब करना होगा, जब उन्हें दी गई शर्तों के तहत PendingIntents को शुरू करना हो.

ज़्यादातर मामलों में, PendingIntent शुरू करने वाले ऐप्लिकेशन को ही ऑप्ट इन करना चाहिए. हालांकि, अगर ऐप्लिकेशन बनाने वाले को ये खास अधिकार देने हैं, तो:

  • PendingIntent को किसी भी समय शुरू किया जा सकता है, जब ऐप्लिकेशन दिख रहा हो.
  • अगर ऐप्लिकेशन बनाने वाले के पास खास अनुमतियां हैं, तो PendingIntent को कभी भी शुरू किया जा सकता है.

ऑप्ट-इन करने के लिए, ऐप्लिकेशन को ActivityOptions बंडल के साथ setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) को PendingIntent.getActivity() या मिलते-जुलते तरीकों से पास करना होगा.

ज़्यादा जानकारी के लिए, काम के रेफ़रंस दस्तावेज़ पढ़ें: