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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PendingIntent भेजने वाले व्यक्ति या कंपनी के ज़रिए

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

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

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

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

PendingIntent बनाने वाले क्रिएटर के ज़रिए

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

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

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

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

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

स्ट्रिक्ट मोड

Android 16 से, ऐप्लिकेशन डेवलपर स्ट्रिक्ट मोड चालू कर सकता है. इससे उसे सूचना मिलेगी कि गतिविधि लॉन्च होने पर ब्लॉक हो गई है. इसके अलावा, उसे यह भी पता चलेगा कि ऐप्लिकेशन के टारगेट एसडीके को अपग्रेड करने पर, गतिविधि ब्लॉक होने का खतरा है.

आपके ऐप्लिकेशन, ऐक्टिविटी या अन्य ऐप्लिकेशन कॉम्पोनेंट की Application.onCreate() विधि में, इसे जल्दी चालू करने के लिए कोड का उदाहरण:

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
     StrictMode.setVmPolicy(
         StrictMode.VmPolicy.Builder()
         .detectBlockedBackgroundActivityLaunch()
         .penaltyLog()
         .build());
     )
 }

ज़्यादा जानकारी के लिए, स्ट्रिक्ट मोड का दस्तावेज़ पढ़ें.