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

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 बंडल को setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) के साथ PendingIntent.getActivity() या इसी तरह के अन्य तरीकों से पास करना होगा.

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

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

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

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

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

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