Android 9 (एपीआई लेवल 28) और उसके बाद के वर्शन में, ऐप्लिकेशन स्टैंडबाय बकेट की सुविधा काम करती है. ऐप्लिकेशन स्टैंडबाय बकेट की मदद से, सिस्टम यह तय करता है कि ऐप्लिकेशन के संसाधनों के अनुरोधों को किस क्रम में पूरा करना है. यह तय करने के लिए, यह देखा जाता है कि ऐप्लिकेशन का इस्तेमाल हाल ही में किया गया है या नहीं और कितनी बार किया गया है. ऐप्लिकेशन के इस्तेमाल के पैटर्न के आधार पर, हर ऐप्लिकेशन को प्राथमिकता वाली पांच बकेट में से किसी एक में रखा जाता है. सिस्टम, हर ऐप्लिकेशन के लिए डिवाइस के उपलब्ध संसाधनों की सीमा तय करता है. यह सीमा, इस बात पर निर्भर करती है कि ऐप्लिकेशन किस बकेट में है.
प्राथमिकता वाली बकेट
सिस्टम, हर ऐप्लिकेशन को प्राथमिकता वाली बकेट में डाइनैमिक तौर पर असाइन करता है. साथ ही, ज़रूरत के हिसाब से ऐप्लिकेशन को फिर से असाइन करता है. सिस्टम, पहले से लोड किए गए किसी ऐसे ऐप्लिकेशन पर भरोसा कर सकता है जो मशीन लर्निंग का इस्तेमाल करके यह तय करता है कि हर ऐप्लिकेशन का इस्तेमाल कितनी बार किया जा सकता है. साथ ही, ऐप्लिकेशन को सही बकेट में असाइन करता है.
अगर किसी डिवाइस पर सिस्टम ऐप्लिकेशन मौजूद नहीं है, तो सिस्टम डिफ़ॉल्ट रूप से ऐप्लिकेशन को इस आधार पर क्रम में लगाता है कि उन्हें हाल ही में कितनी बार इस्तेमाल किया गया है. ज़्यादा ऐक्टिव ऐप्लिकेशन को ऐसी बकेट असाइन की जाती हैं जिनमें उन्हें ज़्यादा प्राथमिकता दी जाती है. इससे ऐप्लिकेशन के लिए ज़्यादा सिस्टम रिसॉर्स उपलब्ध होते हैं. खास तौर पर, बकेट से यह तय होता है कि ऐप्लिकेशन के जॉब कितनी बार चलते हैं और ऐप्लिकेशन कितनी बार अलार्म ट्रिगर कर सकता है. ये पाबंदियां सिर्फ़ तब लागू होती हैं, जब डिवाइस बैटरी पावर पर हो. डिवाइस चार्ज होने के दौरान, सिस्टम ये पाबंदियां नहीं लगाता.
प्राथमिकता वाली बकेट ये हैं:
- चालू: ऐप्लिकेशन का इस्तेमाल किया जा रहा है या हाल ही में किया गया था.
- वर्किंग सेट: ऐप्लिकेशन का नियमित तौर पर इस्तेमाल किया जा रहा है.
- अक्सर: ऐप्लिकेशन का इस्तेमाल अक्सर किया जाता है, लेकिन हर दिन नहीं.
- अक्सर नहीं: ऐप्लिकेशन का अक्सर इस्तेमाल नहीं किया जाता.
- प्रतिबंधित: ऐप्लिकेशन, सिस्टम के बहुत ज़्यादा संसाधनों का इस्तेमाल करता है या ऐसा व्यवहार कर सकता है जो आपके काम का न हो.
प्राथमिकता वाली इन बकेट के अलावा, उन ऐप्लिकेशन के लिए एक खास कभी बकेट होती है जिन्हें इंस्टॉल किया गया है, लेकिन कभी नहीं चलाया गया. सिस्टम इन ऐप्लिकेशन पर गंभीर पाबंदियां लगाता है.
यहां दिए गए ब्यौरे, अनुमान न लगाने वाले मामले के लिए हैं. इसके उलट, जब व्यवहार का अनुमान लगाने के लिए मशीन लर्निंग का इस्तेमाल किया जाता है, तो बकेट को हाल ही के इस्तेमाल के आधार पर नहीं, बल्कि उपयोगकर्ता की अगली कार्रवाइयों के अनुमान के आधार पर चुना जाता है. उदाहरण के लिए, हाल ही में इस्तेमाल किया गया ऐप्लिकेशन, 'अतिरिक्त' बकेट में जा सकता है. ऐसा इसलिए होता है, क्योंकि मशीन लर्निंग का अनुमान होता है कि ऐप्लिकेशन का इस्तेमाल कई घंटों तक नहीं किया जा सकता.
चालू है
जब किसी ऐप्लिकेशन का इस्तेमाल किया जाता है, हाल ही में इस्तेमाल किया जाता है या वह इनमें से कोई कार्रवाई करता है, तो वह सक्रिय बकेट में शामिल होता है:
- कोई गतिविधि लॉन्च करता है.
- लंबे समय तक चलने वाली फ़ोरग्राउंड सेवा चलाता है.
- उपयोगकर्ता ने सूचना पर टैप किया हो.
अगर कोई ऐप्लिकेशन चालू बकेट में है, तो सिस्टम उस ऐप्लिकेशन के जॉब या अलार्म पर कोई पाबंदी नहीं लगाता.
उपयोगकर्ता इंटरैक्शन, ऐप्लिकेशन को 'सक्रिय' के तौर पर असाइन करता है
Android 9 (एपीआई लेवल 28) और उसके बाद के वर्शन पर, जब उपयोगकर्ता आपके ऐप्लिकेशन के साथ कुछ खास तरीकों से इंटरैक्ट करता है, तो सिस्टम आपके ऐप्लिकेशन को कुछ समय के लिए ऐक्टिव बकेट में डाल देता है. जब उपयोगकर्ता आपके ऐप्लिकेशन से इंटरैक्ट करना बंद कर देता है, तो सिस्टम उसे इस्तेमाल के इतिहास के आधार पर किसी बकेट में डाल देता है.
यहां ऐसे इंटरैक्शन के उदाहरण दिए गए हैं जिनकी वजह से सिस्टम इस तरह से काम करता है:
उपयोगकर्ता, आपके ऐप्लिकेशन से भेजी गई सूचना पर टैप करता है.
उपयोगकर्ता, मीडिया बटन पर टैप करके, आपके ऐप्लिकेशन में फ़ोरग्राउंड सेवा के साथ इंटरैक्ट करता है.
उपयोगकर्ता, Android Automotive OS के साथ इंटरैक्ट करते समय आपके ऐप्लिकेशन से कनेक्ट करता है. इस दौरान, आपका ऐप्लिकेशन फ़ोरग्राउंड सेवा या
CONNECTION_TYPE_PROJECTION
का इस्तेमाल करता है.
वर्किंग सेट
अगर कोई ऐप्लिकेशन अक्सर चलता है, लेकिन वह चालू नहीं है, तो वह वर्किंग सेट बकेट में होता है. उदाहरण के लिए, अगर कोई उपयोगकर्ता किसी सोशल मीडिया ऐप्लिकेशन को रोज़ इस्तेमाल करता है, तो हो सकता है कि वह ऐप्लिकेशन वर्किंग सेट में शामिल हो. अगर ऐप्लिकेशन का इस्तेमाल किसी दूसरे ऐप्लिकेशन के ज़रिए किया जाता है, तो उन्हें भी वर्किंग सेट की बकेट में प्रमोट किया जाता है.
अगर कोई ऐप्लिकेशन काम करने वाले सेट में है, तो सिस्टम उस पर कुछ पाबंदियां लगाता है. इन पाबंदियों की वजह से, ऐप्लिकेशन में जॉब नहीं चल पाते और अलार्म ट्रिगर नहीं हो पाते. ज़्यादा जानकारी के लिए, पावर मैनेजमेंट से जुड़ी पाबंदियां लेख पढ़ें.
अक्सर
अगर किसी ऐप्लिकेशन का नियमित तौर पर इस्तेमाल किया जाता है, लेकिन ज़रूरी नहीं है कि उसका इस्तेमाल हर दिन किया जाए, तो उसे अक्सर इस्तेमाल किए जाने वाले ऐप्लिकेशन की कैटगरी में रखा जाता है. उदाहरण के लिए, कसरत ट्रैक करने वाला कोई ऐप्लिकेशन, जिसे उपयोगकर्ता जिम में इस्तेमाल करता है वह अक्सर इस्तेमाल होने वाले ऐप्लिकेशन की कैटगरी में हो सकता है.
अगर कोई ऐप्लिकेशन 'अक्सर इस्तेमाल होने वाले ऐप्लिकेशन' कैटगरी में आता है, तो सिस्टम उस पर ज़्यादा पाबंदियां लगाता है. इन पाबंदियों की वजह से, ऐप्लिकेशन में जॉब नहीं चल पाते और अलार्म नहीं बज पाते. ज़्यादा जानकारी के लिए, पावर मैनेजमेंट से जुड़ी पाबंदियां लेख पढ़ें.
काफ़ी कम बार
अगर किसी ऐप्लिकेशन का इस्तेमाल अक्सर नहीं किया जाता है, तो उसे अक्सर इस्तेमाल नहीं किया जाता कैटगरी में रखा जाता है. उदाहरण के लिए, होटल का ऐसा ऐप्लिकेशन जिसे उपयोगकर्ता सिर्फ़ उस होटल में ठहरने के दौरान चलाता है, वह शायद 'अन्य' कैटगरी में हो.
अगर कोई ऐप्लिकेशन 'अतिरिक्त' कैटगरी में आता है, तो सिस्टम उस पर जॉब चलाने और अलार्म ट्रिगर करने की सुविधा पर सख्त पाबंदियां लगाता है. यह सिस्टम, ऐप्लिकेशन के इंटरनेट से कनेक्ट होने की सुविधा को भी सीमित करता है. ज़्यादा जानकारी के लिए, पावर मैनेजमेंट से जुड़ी पाबंदियां लेख पढ़ें.
पाबंदी लगी है
Android 12 (एपीआई लेवल 31) में जोड़ी गई इस बकेट की प्राथमिकता सबसे कम है. साथ ही, इसमें सभी बकेट की सबसे ज़्यादा पाबंदियां हैं. सिस्टम आपके ऐप्लिकेशन के व्यवहार को ध्यान में रखता है. जैसे, उपयोगकर्ता उससे कितनी बार इंटरैक्ट करता है. इससे यह तय किया जाता है कि आपके ऐप्लिकेशन को पाबंदी वाली बकेट में रखा जाए या नहीं.
Android 13 (एपीआई लेवल 33) और उसके बाद के वर्शन पर, अगर आपका ऐप्लिकेशन छूट की ज़रूरी शर्तें पूरी नहीं करता है, तो सिस्टम आपके ऐप्लिकेशन को पाबंदी वाली बकेट में डाल देता है. ऐसा इन स्थितियों में होता है:
उपयोगकर्ता कुछ दिनों तक आपके ऐप्लिकेशन का इस्तेमाल न करे. Android 12 (एपीआई लेवल 31) और 12L (एपीआई लेवल 32) पर, यह अवधि 45 दिन होती है. Android 13 में, इस अवधि को घटाकर आठ दिन कर दिया गया है.
आपका ऐप्लिकेशन 24 घंटे के दौरान, बहुत ज़्यादा ब्रॉडकास्ट या बाइंडिंग का इस्तेमाल करता है.
अगर सिस्टम आपके ऐप्लिकेशन को पाबंदी वाली बकेट में डालता है, तो उस पर ये पाबंदियां लागू होंगी:
- हर दिन एक बार, 10 मिनट के बैच वाले सेशन में जॉब चलाए जा सकते हैं. इस सेशन के दौरान, सिस्टम आपके ऐप्लिकेशन की जॉब को अन्य ऐप्लिकेशन की जॉब के साथ ग्रुप करता है.
- पाबंदी वाली जॉब अपने-आप नहीं चलती हैं. एक ही समय पर, कम से कम एक और जॉब चल रहा हो या लंबित हो. इसमें कोई भी और जॉब शामिल हो सकता है.
- आपका ऐप्लिकेशन, ज़्यादा तेज़ी से होने वाली प्रोसेस को कम चला सकता है. ऐसा तब होता है, जब सिस्टम आपके ऐप्लिकेशन को कम पाबंदियों वाली बकेट में डालता है.
- आपका ऐप्लिकेशन, हर दिन एक अलार्म चालू कर सकता है. यह अलार्म, सटीक अलार्म या असटीक अलार्म हो सकता है.
पाबंदी वाले बकेट से जुड़ी छूट
इस तरह के ऐप्लिकेशन, पाबंदी वाली बकेट में शामिल नहीं किए जाते. साथ ही, ये ऐप्लिकेशन Android 12 और उसके बाद के वर्शन पर भी, ऐक्टिविटी न होने पर ट्रिगर होने की सुविधा को बायपास कर देते हैं:
- कंपैनियन डिवाइस के ऐप्लिकेशन
- डेमो मोड में चल रहे डिवाइस पर ऐप्लिकेशन
- डिवाइस के मालिक के ऐप्लिकेशन
- प्रोफ़ाइल के मालिक के ऐप्लिकेशन
- सदाबहार ऐप्लिकेशन
- वीपीएन ऐप्लिकेशन
- ऐसे ऐप्लिकेशन जिनके पास
ROLE_DIALER
भूमिका है - ऐसे ऐप्लिकेशन जिन्हें उपयोगकर्ता ने सिस्टम सेटिंग में, "बिना किसी पाबंदी के" काम करने की अनुमति दी है
- ऐसे ऐप्लिकेशन जिनमें विजेट चालू हैं
- ऐसे ऐप्लिकेशन जिन्हें इनमें से कम से कम एक अनुमति मिली हो:
प्राथमिकता वाली बकेट का आकलन करना
यह देखने के लिए कि आपका ऐप्लिकेशन किस बकेट में असाइन किया गया है, इनमें से कोई एक काम करें:
getAppStandbyBucket()
पर कॉल करें.टर्मिनल विंडो में यह कमांड चलाएं:
adb shell am get-standby-bucket PACKAGE_NAME
जब भी आपके ऐप्लिकेशन को ऐप्लिकेशन स्टैंडबाय बकेट में रखा जाता है, तो सिस्टम आपके ऐप्लिकेशन को कम से कम इस्तेमाल करने की अनुमति देता है. यह बकेट STANDBY_BUCKET_ACTIVE
(10) से ज़्यादा की वैल्यू वाली होनी चाहिए.
सबसे सही तरीके
अगर आपका ऐप्लिकेशन, Doze मोड और ऐप्लिकेशन के स्टैंडबाय मोड के लिए सबसे सही तरीकों का पालन कर रहा है, तो बाद में मिलने वाली पावर मैनेजमेंट सुविधाओं को इस्तेमाल करना मुश्किल नहीं होगा. हालांकि, ऐप्लिकेशन के कुछ ऐसे व्यवहारों की वजह से समस्याएं हो सकती हैं जो पहले ठीक से काम करते थे.
- अपने ऐप्लिकेशन को किसी खास कैटगरी में डालने के लिए, सिस्टम में बदलाव करने की कोशिश न करें. प्राथमिकता तय करने का सिस्टम बदल सकता है. साथ ही, हर डिवाइस मैन्युफ़ैक्चरर अपने हिसाब से एल्गोरिदम का इस्तेमाल करके, अपना बकेटिंग ऐप्लिकेशन लिख सकता है. इसके बजाय, पक्का करें कि आपका ऐप्लिकेशन सही तरीके से काम करे, भले ही वह किसी भी बकेट में हो.
- अगर किसी ऐप्लिकेशन में लॉन्चर गतिविधि नहीं है, तो हो सकता है कि उसे कभी भी चालू बकेट में प्रमोट न किया जाए. इस तरह की गतिविधि के लिए, अपने ऐप्लिकेशन को फिर से डिज़ाइन करें.
अगर उपयोगकर्ता, ऐप्लिकेशन की सूचनाओं के साथ इंटरैक्ट नहीं कर सकते, तो वे ऐप्लिकेशन के प्रमोशन को ऐक्टिव बकेट में ट्रिगर नहीं कर पाएंगे. ऐसे में, कुछ सूचनाओं को फिर से डिज़ाइन करें, ताकि उपयोगकर्ता उनसे इंटरैक्ट कर सकें. कुछ दिशा-निर्देशों के लिए, मटीरियल डिज़ाइन के सूचनाओं के डिज़ाइन पैटर्न देखें.
अगर ज़्यादा प्राथमिकता वाला Firebase Cloud Messaging (FCM) मैसेज मिलने पर, ऐप्लिकेशन कोई सूचना नहीं दिखाता है, तो उपयोगकर्ता ऐप्लिकेशन के साथ इंटरैक्ट नहीं कर सकता. इसलिए, उसे ऐक्टिव बकेट में प्रमोट करें. असल में, ज़्यादा प्राथमिकता वाले FCM मैसेज का इस्तेमाल सिर्फ़ उपयोगकर्ता को सूचना भेजने के लिए किया जाता है. इसलिए, ऐसा नहीं होना चाहिए. 12L (एपीआई लेवल 32) और उससे पहले के वर्शन में, अगर किसी FCM मैसेज को ज़्यादा प्राथमिकता के तौर पर मार्क किया जाता है, लेकिन वह उपयोगकर्ता इंटरैक्शन को ट्रिगर नहीं करता है, तो आने वाले समय में भेजे जाने वाले मैसेज की प्राथमिकता कम हो सकती है.
अगर ऐप्लिकेशन को कई पैकेज में बांटा गया है, तो हो सकता है कि वे पैकेज अलग-अलग बकेट में हों और उनके ऐक्सेस लेवल अलग-अलग हों. अलग-अलग बकेट में असाइन किए गए पैकेज की मदद से, इन ऐप्लिकेशन की जांच करें. इससे यह पक्का किया जा सकेगा कि ऐप्लिकेशन सही तरीके से काम कर रहा है या नहीं.