ऐप्लिकेशन स्टैंडबाय बकेट

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 और उसके बाद के वर्शन पर भी, ऐक्टिविटी न होने पर ट्रिगर होने की सुविधा को बायपास कर देते हैं:

प्राथमिकता बकेट का आकलन करना

यह देखने के लिए कि आपका ऐप्लिकेशन किस बकेट के लिए असाइन किया गया है, इनमें से कोई एक काम करें:

  • getAppStandbyBucket() पर कॉल करें.

  • टर्मिनल विंडो में यह कमांड चलाएं:

    adb shell am get-standby-bucket PACKAGE_NAME

जब भी आपके ऐप्लिकेशन को ऐप्लिकेशन स्टैंडबाय बकेट में रखा जाता है, तो सिस्टम आपके ऐप्लिकेशन को कम से कम इस्तेमाल करने की सुविधा देता है. यह सुविधा तब दी जाती है, जब ऐप्लिकेशन स्टैंडबाय बकेट की वैल्यू STANDBY_BUCKET_ACTIVE (10) से ज़्यादा हो.

सबसे सही तरीके

अगर आपका ऐप्लिकेशन, Doze मोड और ऐप्लिकेशन के स्टैंडबाय मोड के लिए सबसे सही तरीकों का पालन कर रहा है, तो बाद में मिलने वाली पावर मैनेजमेंट सुविधाओं को इस्तेमाल करना मुश्किल नहीं होगा. हालांकि, ऐप्लिकेशन के कुछ ऐसे व्यवहारों की वजह से समस्याएं हो सकती हैं जो पहले ठीक से काम करते थे.

  • अपने ऐप्लिकेशन को किसी खास कैटगरी में डालने के लिए, सिस्टम में बदलाव करने की कोशिश न करें. प्राथमिकता तय करने का सिस्टम बदल सकता है. साथ ही, हर डिवाइस मैन्युफ़ैक्चरर अपने एल्गोरिदम के साथ, अपना बकेट करने वाला ऐप्लिकेशन लिख सकता है. इसके बजाय, यह पक्का करें कि आपका ऐप्लिकेशन सही तरीके से काम करता हो, चाहे वह किसी भी बकेट में हो.
  • अगर किसी ऐप्लिकेशन में लॉन्चर गतिविधि नहीं है, तो हो सकता है कि उसे कभी भी चालू बकेट में प्रमोट न किया जाए. इस तरह की गतिविधि के लिए, अपने ऐप्लिकेशन को फिर से डिज़ाइन करें.
  • अगर उपयोगकर्ता, ऐप्लिकेशन की सूचनाओं के साथ इंटरैक्ट नहीं कर सकते, तो वे ऐप्लिकेशन के प्रमोशन को ऐक्टिव बकेट में ट्रिगर नहीं कर पाएंगे. ऐसे में, कुछ सूचनाओं को फिर से डिज़ाइन करें, ताकि उपयोगकर्ता उनसे इंटरैक्ट कर सकें. कुछ दिशा-निर्देशों के लिए, मटीरियल डिज़ाइन के सूचनाओं के डिज़ाइन पैटर्न देखें.

  • अगर ज़्यादा प्राथमिकता वाला Firebase Cloud Messaging (FCM) मैसेज मिलने पर, ऐप्लिकेशन कोई सूचना नहीं दिखाता है, तो उपयोगकर्ता ऐप्लिकेशन के साथ इंटरैक्ट नहीं कर सकता. इसलिए, उसे ऐक्टिव बकेट में प्रमोट करें. असल में, ज़्यादा प्राथमिकता वाले FCM मैसेज का इस्तेमाल सिर्फ़ उपयोगकर्ता को सूचना भेजने के लिए किया जाता है. इसलिए, ऐसा नहीं होना चाहिए. 12L (एपीआई लेवल 32) और उससे पहले के वर्शन में, अगर किसी FCM मैसेज को गलत तरीके से ज़्यादा प्राथमिकता के तौर पर मार्क किया जाता है, तो आने वाले समय में मैसेज की प्राथमिकता कम हो सकती है. ऐसा तब होता है, जब मैसेज से उपयोगकर्ता इंटरैक्शन ट्रिगर न हो.

  • अगर ऐप्लिकेशन को कई पैकेज में बांटा गया है, तो हो सकता है कि वे पैकेज अलग-अलग बकेट में हों और उनके ऐक्सेस लेवल अलग-अलग हों. अलग-अलग बकेट के लिए असाइन किए गए पैकेज के साथ इन ऐप्लिकेशन की जांच करें. इससे यह पक्का किया जा सकेगा कि ऐप्लिकेशन ठीक से काम कर रहा है.