Android 9 (एपीआई लेवल 28) में नई सुविधाएं जोड़ी गई हैं, ताकि डिवाइस पावर मैनेजमेंट को बेहतर बनाया जा सके. ये बदलावों, और उन सुविधाओं के साथ जो पिछले वर्शन में पहले से मौजूद थीं, मदद मिलती है. ताकि यह पक्का किया जा सके कि सिस्टम रिसॉर्स उन ऐप्लिकेशन को दिए जाएं जिन्हें उनकी सबसे ज़्यादा ज़रूरत है.
पावर मैनेजमेंट की सुविधाएं दो कैटगरी में आती हैं:
- ऐप्लिकेशन स्टैंडबाय बकेट
- सिस्टम, उपयोगकर्ता के डिवाइस के इस्तेमाल के पैटर्न के आधार पर, ऐप्लिकेशन के डिवाइस के संसाधनों जैसे कि सीपीयू या बैटरी के ऐक्सेस को सीमित करता है. यह इसके लिए एक नई सुविधा है Android 9.
- बैटरी सेवर मोड में किए गए सुधार
- बैटरी सेवर की सुविधा चालू होने पर, सिस्टम सभी ऐप्लिकेशन पर पाबंदियां लगा देता है. यह एक मौजूदा सुविधा है, जिसे Android 9 ��ें बेहतर बनाया गया.
ऐप्लिकेशन स्टैंडबाय बकेट
Android 9 में बैटरी मैनेजमेंट की नई सुविधा, ऐप्लिकेशन स्टैंडबाय बकेट की सुविधा लॉन्च की गई. ऐप्लिकेशन स्टैंडबाय बकेट, ऐप्लिकेशन को प्राथमिकता देने में सिस्टम की सहायता करती है संसाधनों के लिए अनुरोध ऐप्लिकेशन का इस्तेमाल कितनी बार और कितनी बार किया जाता है. ऐप्लिकेशन के इस्तेमाल के आधार पर पैटर्न के लिए, प्रत्येक ऐप्लिकेशन को पांच प्राथमिकता बकेट में से एक में रखा जाता है. सिस्टम यह तय करता है कि ऐप्लिकेशन किस बकेट के हिसाब से, हर ऐप्लिकेशन के लिए उपलब्ध डिवाइस के संसाधनों को सीमित करेगा शामिल है.
ये पांच बकेट, ऐप्लिकेशन को इन विशेषताओं के आधार पर ग्रुप में प्राथमिकता देते हैं:
- चालू है
अगर कोई उपयोगकर्ता फ़िलहाल ऐप्लिकेशन का इस्तेमाल कर रहा है, तो वह ऐप्लिकेशन ऐक्टिव बकेट में शामिल होता है. उदाहरण के लिए:
- ऐप्लिकेशन ने कोई गतिविधि शुरू की है
- ऐप्लिकेशन, फ़ोरग्राउंड सेवा चला रहा हो
- इस ऐप्लिकेशन में एक सिंक अडैप्टर है, जो कॉन्टेंट उपलब्ध कराने वाले ऐप्लिकेशन से जुड़ा है. इस अडैप्टर का इस्तेमाल फ़ोरग्राउंड ऐप्लिकेशन
- उपयोगकर्ता, ऐप्लिकेशन से मिली सूचना पर क्लिक करता है
अगर कोई ऐप्लिकेशन ऐक्टिव बकेट में है, तो सिस्टम ऐप्लिकेशन के जॉब, अलार्म या एफ़सीएम मैसेज पर कोई पाबंदी नहीं लगाता.
- वर्किंग सेट
अगर कोई ऐप्लिकेशन अक्सर चलता है, लेकिन वह फ़िलहाल काम नहीं कर रहा, तो वह काम करने वाले सेट बकेट में होता है सक्रिय है. उदाहरण के लिए, ऐसा सोशल मीडिया ऐप्लिकेशन जो उपयोगकर्ता ज़्यादातर दिनों में लॉन्च करता है, वह काम करने वाले सेट में शामिल हो सकता है. ऐप्लिकेशन को काम करने के तरीके पर ले जाया जाता है बकेट में तब तक शामिल करें, जब तक कि उनका इस्तेमाल किसी दूसरे तरीके से नहीं किया जाता.
अगर कोई ऐप्लिकेशन काम करने वाले सेट में है, तो सिस्टम उस पर कुछ पाबंदियां लगाता है. इन पाबंदियों की वजह से, ऐप्लिकेशन में जॉब नहीं चल पाते और अलार्म ट्रिगर नहीं हो पाते. ज़्यादा जानकारी के लिए, पावर मैनेजमेंट से जुड़ी पाबंदियां देखें.
- अक्सर
अगर कोई ऐप्लिकेशन नियमित रूप से इस्तेमाल किया जाता है, तो वह अक्सर बकेट में शामिल होता है, लेकिन ज़रूरी नहीं है कि मदद मिलती है. उदाहरण के लिए, कसरत को ट्रैक करने वाला ऐसा ऐप्लिकेशन जिसे उपयोगकर्ता जिम में चलाता है बार-बार आने वाले लोगों की संख्या में हो सकता है.
अगर कोई ऐप्लिकेशन बार-बार इस्तेमाल किए जाने वाले ऐप्लिकेशन की सूची में शामिल है, तो सिस्टम उस ऐप्लिकेशन पर सख्त पाबंदियां लागू करता है काम करने, अलार्म ट्रिगर करने, और सीमा लगाने की क्षमता ज़्यादा प्राथमिकता वाले FCM मैसेज चुने जा सकते हैं. जानकारी के लिए, यह देखें पावर मैनेजमेंट की पाबंदियां.
- काफ़ी कम बार
अगर किसी ऐप्लिकेशन का इस्तेमाल अक्सर नहीं किया जाता है, तो उसे 'अक्सर इस्तेमाल नहीं किया जाने वाला ऐप्लिकेशन' कैटगरी में रखा जाता है. उदाहरण के लिए, होटल का ऐसा ऐप्लिकेशन जो उपयोगकर्ता सिर्फ़ उस होटल में ठहरने के दौरान चलाता है, वह शायद 'अन्य' कैटगरी में हो.
अगर कोई ऐप्लिकेशन खास बकेट में शामिल होता है, तो सिस्टम, उस ऐप्लिकेशन पर सख्त पाबंदियां लगाता है यह जॉब चलाने, अलार्म ट्रिगर करने, और ज़्यादा प्राथमिकता वाले FCM मैसेज पाने की सुविधा देता है. सिस्टम, ऐप्लिकेशन को इंटरनेट से कनेक्ट करने की क्षमता को भी सीमित करता है. इसके लिए ज़्यादा जानकारी के लिए, पावर मैनेजमेंट की पाबंदियां देखें.
- कभी नहीं
इंस्टॉल तो किए गए, लेकिन कभी नहीं चलने वाले ऐप्लिकेशन 'कभी नहीं' बकेट के तौर पर असाइन किए जाते हैं. सिस्टम इन ऐप्लिकेशन पर गंभीर पाबंदियां लगाता है.
सिस्टम, डाइनैमिक तौर पर हर ऐप्लिकेशन को प्राथमिकता बकेट में असाइन करता है और किसी भी समय ऐप्लिकेशन का इस्तेमाल कर सकते हैं. सिस्टम, पहले से लोड किए गए ऐसे ऐप्लिकेशन पर भरोसा कर सकता है जो मशीन का इस्तेमाल करता है में से हर एक के लिए, ऐप्लिकेशन का इस्तेमाल करना होता है और वह सही बकेट को ऐप्लिकेशन असाइन करता है. अगर सिस्टम ऐप किसी डिवाइस पर मौजूद नहीं है, सिस्टम डिफ़ॉल्ट रूप से ऐप को उनका इस्तेमाल कब किया गया. ज़्यादा ऐक्टिव ऐप्लिकेशन को ऐसी बकेट असाइन की जाती हैं जिनमें ऐप्लिकेशन को ज़्यादा प्राथमिकता दी जाती है. इससे ऐप्लिकेशन के लिए ज़्यादा सिस्टम संसाधन उपलब्ध होते हैं. खास तौर पर, बकेट से यह तय होता है कि ऐप्लिकेशन की जॉब कितनी बार चलेंगी, ऐप्लिकेशन कितनी बार ��लार्म ट्रिगर कर सकता है, और ऐप्लिकेशन को ज़्यादा प्राथमिकता वाले Firebase Cloud Messaging (FCM) मैसेज कितनी बार मिल सकते हैं. ये पाबंदियां सिर्फ़ तब लागू होती हैं, जब डिवाइस बैटरी से चल रहा हो; सिस्टम डिवाइस के चार्ज होने के दौरान, ऐप्लिकेशन पर ये पाबंदियां नहीं लागू करती.
हर मैन्युफ़ैक्चरर यह तय कर सकता है कि ऐप्लिकेशन का इस्तेमाल न करने वाले ऐप्लिकेशन कितने ज़रूरी हैं
बकेट को असाइन किया जाता है. आपको यह कंट्रोल करने की कोशिश नहीं करनी चाहिए कि आपका ऐप्लिकेशन किस कैटगरी में आता है
इन्हें असाइन किया गया है. इसके बजाय, इस बात पर ध्यान दें कि आपका ऐप्लिकेशन किसी भी कैटगरी में सही तरीके से काम करे. आपका ऐप्लिकेशन यह पता लगा सकता है कि वह फ़िलहाल किस बकेट में है
पुष्टि करने का नया तरीक़ा
UsageStatsManager.getAppStandbyBucket()
.
सबसे सही तरीके
अगर आपका ऐप्लिकेशन पहले से ही Doze मोड और ऐप्लिकेशन के स्टैंडबाय मोड के लिए सबसे सही तरीकों का पालन कर रहा है, तो पावर मैनेजमेंट की नई सुविधाओं को मैनेज करना मुश्किल नहीं होगा. हालांकि, ऐप्लिकेशन के कुछ काम करने के तरीके जो पहले कारगर थे, अब समस्याएं पैदा कर सकती हैं.
- अपने ऐप्लिकेशन को एक बकेट में रखने के लिए सिस्टम में हेर-फेर करने की कोशिश न करें या कोई दूसरा. सिस्टम के बकेटिंग के तरीके बदल सकते हैं और हर डिवाइस बकेटिंग ऐप्लिकेशन की मदद से, मैन्युफ़ैक्चरर खुद का बकेटिंग ऐप्लिकेशन लिख सकता है एल्गोरिदम. इसके बजाय, पक्का करें कि आपका ऐप्लिकेशन सही तरीके से काम करे, भले ही वह किसी भी बकेट में हो.
- ��गर किसी ऐप्लिकेशन में लॉन्चर गतिविधि नहीं है, तो हो सकता है कि उसे कभी भी ऐक्टिव बकेट. हो सकता है कि आप अपने ऐप्लिकेशन को फिर से डिज़ाइन करना चाहें, ताकि गतिविधि.
- अगर ऐप्लिकेशन की सूचनाओं पर कोई कार्रवाई नहीं की जा सकती, तो उपयोगकर्ता आपकी कार्रवाइयों को सूचनाओं के साथ इंटरैक्ट करके, ऐक्टिव बकेट में ऐप्लिकेशन का प्रमोशन करने के लिए. ऐसे में, हो सकता है कि आप कुछ सही सूचनाओं को फिर से डिज़ाइन करना चाहें, ताकि उपयोगकर्ता उनका जवाब दे सके. कुछ दिशा-निर्देशों के लिए, Material Design के सूचनाओं के डिज़ाइन पैटर्न देखें.
इसी तरह, अगर ऐप्लिकेशन ज़्यादा प्राथमिकता वाला FCM मैसेज, यह उपयोगकर्ता को ऐप्लिकेशन के साथ इंटरैक्ट करने का मौका नहीं देगा और इस तरह से ऐक्टिव बकेट को चुनें. असल में, ज़्यादा प्राथमिकता वाले FCM मैसेज का इस्तेमाल सिर्फ़ उपयोगकर्ता को सूचना भेजने के लिए किया जाता है. इसलिए, ऐसा कभी नहीं होना चाहिए. अगर आपको किसी FCM मैसेज के ट्रिगर न होने पर, उसे गलत तरीके से 'ज़्यादा प्राथमिकता' के तौर पर मार्क करना उपयोगकर्ता इंटरैक्शन के कारण अन्य नकारात्मक परिणाम हो सकते हैं; उदाहरण के लिए, यह हो सकता है कि आपके ऐप्लिकेशन का कोटा खत्म हो जाए, जिससे ऐप्लिकेशन FCM मैसेज को सामान्य प्राथमिकता के तौर पर माना जाएगा.
ध्यान दें: अगर उपयोगकर्ता किसी सूचना को बार-बार खारिज करता है, तो सिस्टम से उपयोगकर्ता को भविष्य में उस नोटिफ़िकेशन को ब्लॉक करने का विकल्प मिलता है. अपने ऐप्लिकेशन को ऐक्टिव बकेट!
अगर ऐप्लिकेशन एक से ज़्यादा पैकेज में बंटे हुए हैं, तो वे पैकेज अलग-अलग बकेट की वजह से, उनके ऐक्सेस लेवल भी अलग-अलग होते हैं. आपको अलग-अलग बकेट में असाइन किए गए पैकेज के साथ, ऐसे ऐप्लिकेशन की जांच करनी चाहिए, ताकि यह पक्का किया जा सके कि ऐप्लिकेशन सही तरीके से काम कर रहा है.
बैटरी सेवर में किए गए सुधार
Android 9 में, बैटरी सेवर मोड में कई सुधार किए गए हैं. डिवाइस बनाने वाली कंपनी, लगाई गई पाबंदियों को सटीक तरीके से तय करती है. उदाहरण के लिए, ��ालू AOSP बिल्ड बनाता है, तो सिस्टम इन पाबंदियों को लागू करता है:
- सिस्टम, ऐप्लिकेशन के स्टैंडबाय मोड में जाने का इंतज़ार करने के बजाय, ऐप्लिकेशन को ज़्यादा तेज़ी से स्टैंडबाय मोड में डाल देता है.
- बैकग्राउंड में कोड एक्ज़ीक्यूट करने की सीमाएं सभी ऐप्लिकेशन पर लागू होती हैं, भले ही उनका टारगेट एपीआई कुछ भी हो लेवल.
- स्क्रीन बंद होने पर, जगह की जानकारी वाली सेवाएं बंद हो सकती हैं.
- बैकग्राउंड में चल रहे ऐप्लिकेशन के पास नेटवर्क का ऐक्सेस नहीं होता.
इसके अलावा, डिवाइस के हिसाब से पावर ऑप्टिमाइज़ेशन के अन्य विकल्प भी हैं. पूरी जानकारी के लिए, पावर मैनेजमेंट से जुड़ी पाबंदियों के बारे में बताने वाला पेज देखें.
हमेशा की तरह, बैटरी सेवर चालू रहने के दौरान अपने ऐप्लिकेशन को टेस्ट करना बेहतर होगा. डिवाइस की सेटिंग > बैटरी सेवर स्क्रीन पर जाकर, बैटरी सेवर मोड को मैन्युअल तरीके से चालू किया जा सकता है.
जांच और समस्या हल करना
पावर मैनेजमेंट की नई सुविधाओं का असर, Android 9 डिवाइसों पर चलने वाले सभी ऐप्लिकेशन पर पड़ता है. भले ही, वे ऐप्लिकेशन Android 9 को टारगेट करते हों या नहीं. यह पक्का करना ज़रूरी है कि आपका ऐप्लिकेशन ठीक से काम करे ठीक से कर सकें.
अलग-अलग स्थितियों में, अपने ऐप्लिकेशन के मुख्य इस्तेमाल के उदाहरणों की जांच करना न भूलें. इससे यह पता चलेगा कि पावर मैनेजमेंट की सुविधाएं एक-दूसरे के साथ कैसे इंटरैक्ट करती हैं. इसके लिए, Android पर डीबग ब्रिज निर्देशों का पालन करें सुविधाएं चालू और बंद करें.
Android डीबग ब्रिज निर्देश
पावर मैनेजमेंट की कई सुविधाओं की जांच करने के लिए, Android Debug Bridge के शेल निर्देशों का इस्तेमाल किया जा सकता है.
अपने डिवाइस को Doze में रखने के लिए ADB का इस्तेमाल करने के बारे में जानकारी के लिए, देखें डोज़ और ऐप स्टैंडबाय के साथ परीक्षण करना.
ऐप्लिकेशन स्टैंडबाय बकेट
अपने ऐप्लिकेशन को मैन्युअल तरीके से किसी ऐप्लिकेशन स्टैंडबाय बकेट पर असाइन करने के लिए, ADB का इस्तेमाल किया जा सकता है. किसी ऐप्लिकेशन का बकेट बदलने के लिए, इस निर्देश का इस्तेमाल करें:
$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare
इस निर्देश का इस्तेमाल करके, एक साथ कई पैकेज भी सेट किए जा सकते हैं:
$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
यह देखने के लिए कि कोई ऐप्लिकेशन किस बकेट में है, चलाएं
$ adb shell am get-standby-bucket [packagename]
अगर आप packagename पैरामीटर पास नहीं करते हैं, तो कमांड
बकेट में जोड़े जा सकते हैं. कोई ऐप्लिकेशन, रनटाइम के दौरान अपनी बकेट का पता भी लगा सकता है. इसके लिए, उसे नए तरीके UsageStatsManager.getAppStandbyBucket()
को कॉल करना होगा.
बैटरी सेवर
कम पावर की स्थितियों में आपका ऐप्लिकेशन कैसे काम करता है, यह जानने के लिए कई निर्देश हैं.
डिवाइस को अनप्लग करने का अनुकरण करने के लिए, इस निर्देश का इस्तेमाल करें
$ adb shell dumpsys battery unplug
यह जांचने के लिए कि कम बैटरी होने पर डिवाइस कैसे काम करता है, इस कमांड का इस्तेमाल करें:
$ adb shell settings put global low_power 1
जांच पूरी करने के बाद, इस निर्देश का इस्तेमाल करके डिवाइस की मैन्युअल सेटिंग को पहले जैसा किया जा सकता है:
$ adb shell dumpsys battery reset