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

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 शुरू करना है उन्हें

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

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

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

PendingIntent बनाने वाले क्रिएटर के पास

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

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

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

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

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