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

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());
     )
 }

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