Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन में, ऐप स्टैंडबाय बकेट की सुविधा काम करती है. ऐप्लिकेशन स्टैंडबाय बकेट की मदद से, सिस्टम संसाधनों के लिए ऐप्लिकेशन के अनुरोधों को प्राथमिकता देता है. यह इस आधार पर तय होता है कि ऐप्लिकेशन का इस्तेमाल हाल ही में और कितनी बार किया गया है. ऐप्लिकेशन इस्तेमाल करने के पैटर्न के आधार पर, हर ऐप्लिकेशन को प्राथमिकता के हिसाब से पांच बकेट में से किसी एक में रखा जाता है. सिस्टम, हर ऐप्लिकेशन के लिए उपलब्ध डिवाइस के संसाधनों को सीमित करता है. यह इस बात पर निर्भर करता है कि ऐप्लिकेशन किस बकेट में है.
प्राथमिकता बकेट
सिस्टम, हर ऐप्लिकेशन को डाइनैमिक तौर पर प्राथमिकता वाली बकेट में असाइन करता है. साथ ही, ज़रूरत पड़ने पर ऐप्लिकेशन को फिर से असाइन करता है. सिस्टम, पहले से लोड किए गए किसी ऐसे ऐप्लिकेशन पर निर्भर हो सकता है जो मशीन लर्निंग का इस्तेमाल करता है. इससे यह तय किया जाता है कि हर ऐप्लिकेशन के इस्तेमाल किए जाने की कितनी संभावना है. साथ ही, ऐप्लिकेशन को सही बकेट में असाइन किया जाता है.
अगर किसी डिवाइस पर सिस्टम ऐप्लिकेशन मौजूद नहीं है, तो सिस्टम डिफ़ॉल्ट रूप से ऐप्लिकेशन को इस आधार पर क्रम से लगाता है कि उन्हें हाल ही में कब इस्तेमाल किया गया था. ज़्यादा इस्तेमाल किए जाने वाले ऐप्लिकेशन को ऐसी बकेट में असाइन किया जाता है जो उन्हें ज़्यादा प्राथमिकता देती हैं. इससे ऐप्लिकेशन के लिए, सिस्टम के ज़्यादा संसाधन उपलब्ध होते हैं. खास तौर पर, बकेट से यह तय होता है कि ऐप्लिकेशन के जॉब कितनी बार चलते हैं और ऐप्लिकेशन कितनी बार अलार्म ट्रिगर कर सकता है. ये पाबंदियां सिर्फ़ तब लागू होती हैं, जब डिवाइस बैटरी पावर पर हो. डिवाइस के चार्ज होने के दौरान, सिस्टम ये पाबंदियां नहीं लगाता.
को कॉल करें.प्राथमिकता के बकेट ये हैं:
- ऐक्टिव: ऐप्लिकेशन का इस्तेमाल किया जा रहा है या हाल ही में किया गया था.
- वर्किंग सेट: ऐप्लिकेशन का इस्तेमाल नियमित तौर पर किया जा रहा है.
- अक्सर: ऐप्लिकेशन का इस्तेमाल अक्सर किया जाता है, लेकिन रोज़ नहीं.
- कम: ऐप्लिकेशन का इस्तेमाल अक्सर नहीं किया जाता.
- पाबंदी लगी है: ऐप्लिकेशन, सिस्टम के बहुत सारे संसाधनों का इस्तेमाल करता है या हो सकता है कि वह अनचाहा व्यवहार दिखाए.
प्राथमिकता वाली इन बकेट के अलावा, एक खास कभी नहीं बकेट भी होती है. यह उन ऐप्लिकेशन के लिए होती है जो इंस्टॉल तो किए गए हैं, लेकिन कभी इस्तेमाल नहीं किए गए. सिस्टम, इन ऐप्लिकेशन पर सख्त पाबंदियां लगाता है.
यहां दिए गए ब्यौरे, नॉन-प्रेडिक्टिव केस के लिए हैं. इसके उलट, जब व्यवहार का अनुमान लगाने के लिए मशीन लर्निंग का इस्तेमाल किया जाता है, तो बकेट को हाल ही में इस्तेमाल किए गए डेटा के आधार पर नहीं, बल्कि उपयोगकर्ता की अगली कार्रवाइयों के अनुमान के आधार पर चुना जाता है. उदाहरण के लिए, हाल ही में इस्तेमाल किया गया कोई ऐप्लिकेशन, 'कभी-कभार इस्तेमाल होने वाले ऐप्लिकेशन' बकेट में जा सकता है. ऐसा इसलिए, क्योंकि मशीन लर्निंग से यह अनुमान लगाया जाता है कि उस ऐप्लिकेशन का इस्तेमाल कई घंटों तक नहीं किया जाएगा.
चालू है
किसी ऐप्लिकेशन को ऐक्टिव बकेट में तब रखा जाता है, जब उसका इस्तेमाल किया जा रहा हो, हाल ही में उसका इस्तेमाल किया गया हो या वह इनमें से कोई काम करता हो:
- कोई गतिविधि लॉन्च की जाती है.
- लंबे समय तक चलने वाली फ़ोरग्राउंड सेवा चलाता है.
- उपयोगकर्ता ने सूचना पर टैप किया हो.
अगर कोई ऐप्लिकेशन ऐक्टिव बकेट में है, तो सिस्टम उसके जॉब या अलार्म पर कम से कम पाबंदियां लगाता है:
- Android 16 (एपीआई लेवल 36) से, बैकग्राउंड में चलने वाले टास्क के लिए रनटाइम कोटा ज़्यादा होता है. हालांकि, ऐसा तब होता है, जब उन्हें ऐक्टिव बकेट में मौजूद किसी ऐप्लिकेशन ने शुरू किया हो.
इसमें
JobSchedulerकी मदद से सीधे तौर पर शेड्यूल किए गए टास्क शामिल हैं. साथ ही, इसमें WorkManager याDownloadManagerजैसी अन्य लाइब्रेरी से बनाए गए टास्क भी शामिल हैं.
उपयोगकर्ता के इंटरैक्शन से, ऐप्लिकेशन को चालू के तौर पर असाइन किया जाता है
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) से ज़्यादा होती है, तो सिस्टम आपके ऐप्लिकेशन को थ्रॉटल कर देता है.
सबसे सही तरीके
अगर आपका ऐप्लिकेशन, बैटरी बचाने और ऐप स्टैंडबाय के लिए सबसे सही तरीके अपना रहा है, तो पावर मैनेजमेंट की अन्य सुविधाओं को इस्तेमाल करना मुश्किल नहीं है. हालांकि, ऐप्लिकेशन के कुछ ऐसे व्यवहार जो पहले ठीक से काम करते थे, उनसे समस्याएं हो सकती हैं.
- सिस्टम में हेर-फेर करके, अपने ऐप्लिकेशन को किसी खास बकेट में डालने की कोशिश न करें. सिस्टम में प्राथमिकता तय करने का तरीका बदल सकता है. साथ ही, डिवाइस बनाने वाली हर कंपनी, अपने एल्गोरिदम के हिसाब से बकेटिंग ऐप्लिकेशन बना सकती है. इसके बजाय, पक्का करें कि आपका ऐप्लिकेशन सही तरीके से काम करे, भले ही वह किसी भी बकेट में हो.
- अगर किसी ऐप्लिकेशन में लॉन्चर गतिविधि नहीं है, तो हो सकता है कि उसे कभी भी ऐक्टिव बकेट में प्रमोट न किया जाए. अपने ऐप्लिकेशन को फिर से डिज़ाइन करें, ताकि उसमें ऐसी गतिविधि शामिल की जा सके.
अगर उपयोगकर्ता, ऐप्लिकेशन की सूचनाओं के साथ इंटरैक्ट नहीं कर सकते, तो वे ऐप्लिकेशन को ऐक्टिव बकेट में प्रमोट नहीं कर पाएंगे. ऐसे में, कुछ सूचनाओं को फिर से डिज़ाइन करें, ताकि उपयोगकर्ता उनसे इंटरैक्ट कर सकें. कुछ दिशा-निर्देशों के लिए, मटीरियल डिज़ाइन के सूचनाओं के डिज़ाइन पैटर्न देखें.
अगर ऐप्लिकेशन को
RemoteNotificationFirebase क्लाउड से मैसेज (FCM) मिलने पर सूचना नहीं दिखती है, तो उपयोगकर्ता ऐप्लिकेशन के साथ इंटरैक्ट नहीं कर सकता. इस वजह से, ऐप्लिकेशन को ऐक्टिव बकेट में प्रमोट नहीं किया जा सकता. असल में,RemoteNotificationका इस्तेमाल सिर्फ़ उपयोगकर्ता को सूचना भेजने के लिए किया जाता है. इसलिए, ऐसी स्थिति नहीं आनी चाहिए. इस तरह के मैसेज का इस्तेमाल करने के लिए, नीति उल्लंघन ठीक करने का तरीका लागू किया गया है: 20 सेकंड की एक्ज़ीक्यूशन विंडो, जो ओरिजनल सूचना पर वापस ले जाती है. अगर ऐप्लिकेशन फ़ोरग्राउंड में है या उपयोगकर्ता ने उसे बैकग्राउंड में चलाने की अनुमति दी है, तो नीति उल्लंघन ठीक करने का कोई तरीका लागू नहीं होता.अगर ऐप्लिकेशन को कई पैकेज में बांटा गया है, तो हो सकता है कि वे पैकेज अलग-अलग बकेट में हों और उनके ऐक्सेस लेवल अलग-अलग हों. इन ऐप्लिकेशन को अलग-अलग बकेट को असाइन किए गए पैकेज के साथ टेस्ट करें, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन सही तरीके से काम कर रहा है.