Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन में, ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान, गतिविधियों को शुरू करने पर पाबंदियां लगाई जाती हैं. इन पाबंदियों से, उपयोगकर्ता के लिए रुकावटें कम होती हैं. साथ ही, उपयोगकर्ता को अपनी स्क्रीन पर दिखने वाले कॉन्टेंट पर ज़्यादा कंट्रोल मिलता है.
इस गाइड में, बैकग्राउंड से गतिविधियां शुरू करने के लिए, सूचनाओं को एक विकल्प के तौर पर दिखाया गया है. इसमें उन खास मामलों की सूची भी दी गई है जहां पाबंदी लागू नहीं होती.
सूचनाएं दिखाएं
ज़्यादातर मामलों में, बैकग्राउंड में चल रहे ऐप्लिकेशन को, सीधे तौर पर कोई गतिविधि शुरू करने के बजाय, समय के हिसाब से ज़रूरी सूचनाएं दिखानी चाहिए. इससे उपयोगकर्ता को ज़रूरी जानकारी मिल पाती है. इस तरह की सूचनाओं में, फ़ोन कॉल का जवाब देना या अलार्म क्लॉक का बजना शामिल है.
सूचनाओं पर आधारित इस अलर्ट और रिमाइंडर सिस्टम से, उपयोगकर्ताओं को कई फ़ायदे मिलते हैं:
- डिवाइस का इस्तेमाल करते समय, उपयोगकर्ता को हेड्स-अप सूचना दिखती है. इससे उन्हें जवाब देने में मदद मिलती है. उपयोगकर्ता अपने मौजूदा कॉन्टेक्स्ट में बना रहता है और उसके पास स्क्रीन पर दिखने वाले कॉन्टेंट को कंट्रोल करने का विकल्प होता है.
- समय के हिसाब से ज़रूरी सूचनाएं, उपयोगकर्ता के परेशान न करें मोड के नियमों के मुताबिक दिखती हैं. उदाहरण के लिए, 'परेशान न करें' मोड चालू होने पर, उपयोगकर्ता सिर्फ़ चुनिंदा संपर्कों या बार-बार कॉल करने वाले लोगों से कॉल पाने की अनुमति दे सकते हैं.
- डिवाइस की स्क्रीन बंद होने पर, फ़ुल-स्क्रीन इंटेंट तुरंत लॉन्च हो जाता है.
- डिवाइस की सेटिंग स्क्रीन पर, उपयोगकर्ता यह देख सकता है कि हाल ही में किन ऐप्लिकेशन ने सूचनाएं भेजी हैं. इसमें सूचनाओं के खास चैनलों से भेजी गई सूचनाएं भी शामिल हैं. इस स्क्रीन से, उपयोगकर्ता सूचना पाने से जुड़ी अपनी सेटिंग को कंट्रोल कर सकता है.
ऐप्लिकेशन कब गतिविधियां शुरू कर सकते हैं
Android 10 या इसके बाद के वर्शन पर चलने वाले ऐप्लिकेशन, गतिविधियां तब शुरू कर सकते हैं, जब इनमें से एक या उससे ज़्यादा शर्तें पूरी होती हैं:
ऐप्लिकेशन की कोई विंडो दिख रही हो. जैसे, फ़ोरग्राउंड में कोई गतिविधि चल रही हो.
ऐप्लिकेशन की कोई गतिविधि, बैक स्टैक में हो.
ऐप्लिकेशन की कोई गतिविधि, हाल ही में शुरू हुई हो.
ऐप्लिकेशन ने हाल ही में किसी गतिविधि पर
finish()को कॉल किया हो. यह सिर्फ़ तब लागू होता है, जबfinish()को कॉल किए जाने के समय, ऐप्लिकेशन में या तो फ़ोरग्राउंड में कोई गतिविधि चल रही हो या फ़ोरग्राउंड टास्क के बैक स्टैक में कोई गतिविधि हो.ऐप्लिकेशन में इनमें से कोई एक सेवा हो जो सिस्टम से जुड़ी हो. इन सेवाओं को यूज़र इंटरफ़ेस (यूआई) लॉन्च करने की ज़रूरत पड़ सकती है.
AccessibilityServiceAutofillServiceCallRedirectionServiceHostApduServiceInCallServiceTileService(Android 14 (एपीआई लेवल 34) और इसके बाद के वर्शन पर लागू नहीं)VoiceInteractionServiceVrListenerService.
ऐप्लिकेशन में कोई ऐसी सेवा हो जो किसी दूसरे, दिखने वाले ऐप्लिकेशन से जुड़ी हो. बैकग्राउंड में चल रहे ऐप्लिकेशन को गतिविधियां शुरू करने के लिए, सेवा से जुड़ा ऐप्लिकेशन दिखना चाहिए.
ऐप्लिकेशन को सिस्टम से सूचना
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 बनाने वाले व्यक्ति या संगठन के हिसाब से
ज़्यादातर मामलों में, PendingIntent शुरू करने वाले ऐप्लिकेशन को ऑप्ट-इन करना चाहिए.
हालांकि, अगर ऐप्लिकेशन बनाने वाले व्यक्ति या संगठन को ये खास अधिकार देने हैं, तो:
PendingIntentको किसी भी समय शुरू किया जा सकता है, जब ऐप्लिकेशन बनाने वाला व्यक्ति या संगठन दिख रहा हो.PendingIntentको किसी भी समय शुरू किया जा सकता है, अगर ऐप्लिकेशन बनाने वाले व्यक्ति या संगठन के पास खास अधिकार हों.
ऑप्ट-इन करने के लिए, ऐप्लिकेशन को ActivityOptions बंडल के साथ
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) को
PendingIntent.getActivity() या इसी तरह के अन्य तरीकों में पास करना चाहिए.
ज़्यादा जानकारी के लिए, रेफ़रंस से जुड़े दस्तावेज़ पढ़ें:
ActivityOptions.setPendingIntentBackgroundActivityStartModeActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode
स्ट्रिक्ट मोड
Android 16 से, ऐप्लिकेशन डेवलपर, स्ट्रिक्ट मोड चालू कर सकता है. इससे उसे तब सूचना मिलेगी, जब गतिविधि लॉन्च करने पर रोक लगाई जाएगी. साथ ही, उसे तब भी सूचना मिलेगी, जब ऐप्लिकेशन के टारगेट एसडीके को बढ़ाने पर, गतिविधि लॉन्च करने पर रोक लगने का खतरा होगा.
अपने ऐप्लिकेशन, गतिविधि या अन्य ऐप्लिकेशन कॉम्पोनेंट के Application.onCreate() तरीके में, शुरू से ही स्ट्रिक्ट मोड चालू करने के लिए, कोड का उदाहरण:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
StrictMode.setVmPolicy(
StrictMode.VmPolicy.Builder()
.detectBlockedBackgroundActivityLaunch()
.penaltyLog()
.build());
)
}
ज़्यादा जानकारी के लिए, स्ट्रिक्ट मोड का दस्तावेज़ पढ़ें.