बैटरी बचाएं और ऐप स्टैंडबाय के लिए ऑप्टिमाइज़ करें

Android में पावर बचाने वाली दो सुविधाएं हैं, जो डिवाइस के पावर सोर्स से कनेक्ट न होने पर ऐप्लिकेशन के काम करने के तरीके को मैनेज करके, उपयोगकर्ताओं के लिए बैटरी लाइफ़ बढ़ाती हैं: Doze और ऐप्लिकेशन स्टैंडबाय. Doze मोड, डिवाइस के लंबे समय तक इस्तेमाल न होने पर, बैटरी खर्च को कम करता है. इसके लिए, यह ऐप्लिकेशन के लिए बैकग्राउंड सीपीयू और नेटवर्क गतिविधि को कुछ समय के लिए रोक देता है. ऐप्लिकेशन स्टैंडबाय, ऐसे ऐप्लिकेशन के लिए बैकग्राउंड नेटवर्क गतिविधि को रोकता है जिनमें हाल ही में कोई उपयोगकर्ता गतिविधि नहीं हुई है.

डिवाइस के Doze मोड में होने पर, ऐप्लिकेशन को बैटरी का ज़्यादा इस्तेमाल करने वाले कुछ संसाधनों का ऐक्सेस, रखरखाव की विंडो तक नहीं दिया जाता. खास पाबंदियों के बारे में जानकारी, पावर मैनेजमेंट से जुड़ी पाबंदियां में दी गई है.

Doze और ऐप्लिकेशन स्टैंडबाय मोड, Android 6.0 या इसके बाद वाले वर्शन पर चल रहे सभी ऐप्लिकेशन के व्यवहार को मैनेज करते हैं. भले ही, वे खास तौर से एपीआई लेवल 23 को टारगेट कर रहे हों. उपयोगकर्ताओं को बेहतरीन अनुभव देने के लिए, अपने ऐप्लिकेशन को Doze और ऐप्लिकेशन स्टैंडबाय मोड में टेस्ट करें और अपने कोड में ज़रूरी बदलाव करें. नीचे दिए गए सेक्शन में इस बारे में जानकारी दी गई है.

Doze मोड के बारे में जानकारी

अगर कोई उपयोगकर्ता, डिवाइस की स्क्रीन बंद होने पर भी उसे बैटरी बचाएं (डोज़) मोड में चला जाता है, तब भी वह इस मोड में चला जाता है. बैटरी बचाने वाले मोड में, सिस्टम ऐप्लिकेशन के नेटवर्क और सीपीयू की ज़्यादा क्षमता वाली सेवाओं के ऐक्सेस को प्रतिबंधित करता है, ताकि बैटरी बचाई जा सके. यह ऐप्लिकेशन को नेटवर्क ऐक्सेस करने से भी रोकता है. साथ ही, उनके काम करने, सिंक करने, और सामान्य अलार्म को काम करने से रोकता है.

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

पहली इमेज. Doze मोड, ऐप्लिकेशन के लिए नेटवर्क का इस्तेमाल करने और बाकी गतिविधियों को मैनेज करने के लिए, बार-बार होने वाली रखरखाव विंडो उपलब्ध कराता है.

रखरखाव की विंडो खत्म होने के बाद, सिस्टम फिर से Doze मोड में चला जाता है. इससे नेटवर्क का ऐक्सेस निलंबित हो जाता है. साथ ही, टास्क, सिंक, और अलार्म को भी कुछ समय के लिए रोक दिया जाता है. समय के साथ, सिस्टम में रखरखाव के लिए विंडो को कम बार शेड्यूल किया जाता है. इससे, डिवाइस चार्ज न होने पर लंबे समय तक डिवाइस के इस्तेमाल न होने पर, बैटरी खर्च होने की दर कम हो जाती है.

जब उपयोगकर्ता डिवाइस को हिलाकर, स्क्रीन चालू करके या चार्जर से कनेक्ट करके उसे सक्रिय करता है, तो सिस्टम Doze को बंद कर देता है और सभी ऐप्लिकेशन सामान्य गतिविधि फिर से शुरू कर देते हैं.

स्लीप मोड से जुड़ी पाबंदियां

Doze में रहते समय सिस्टम आपके ऐप्स पर निम्न प्रतिबंध लागू करता है:

  • इससे नेटवर्क का ऐक्सेस निलंबित हो जाता है.
  • वेक लॉक को अनदेखा करता है.
  • रखरखाव की अगली विंडो में, AlarmManager, setExact(), और setWindow() के साथ-साथ, स्टैंडर्ड AlarmManager अलार्म को भी बंद कर देता है.
    • अगर आपको बैटरी बचाएं (डोज़) में होने वाले अलार्म सेट करने हों, तो setAndAllowWhileIdle() या setExactAndAllowWhileIdle() इस्तेमाल करें.
    • setAlarmClock() के साथ सेट किए गए अलार्म, सामान्य रूप से बजते रहेंगे. इन अलार्म के बजने से कुछ समय पहले, सिस्टम Doze मोड से बाहर निकल जाता है.
  • वाई-फ़ाई स्कैन नहीं किया जाता.
  • इससे अडैप्टर सिंक नहीं होते.
  • JobScheduler को चलने नहीं देता.

बैटरी बचाएं (डोज़) की चेकलिस्ट

अपने ऐप्लिकेशन को बैटरी बचाएं

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

अलार्म शेड्यूल करने में मदद पाने के लिए, AlarmManager के ये दो तरीके इस्तेमाल किए जा सकते हैं: setAndAllowWhileIdle() और setExactAndAllowWhileIdle(). इन तरीकों से, ऐसे अलार्म सेट किए जा सकते हैं जो डिवाइस में बैटरी होने पर भी सक्रिय होते हैं.

नेटवर्क ऐक्सेस पर Doze मोड की पाबंदी का असर आपके ऐप्लिकेशन पर भी पड़ सकता है. ऐसा खास तौर पर तब होता है, जब ऐप्लिकेशन रीयल-टाइम मैसेज पर निर्भर हो, जैसे कि सूचनाएं या टिकल. अगर आपके ऐप्लिकेशन को मैसेज पाने के लिए, नेटवर्क से लगातार कनेक्ट रहने की ज़रूरत है, तो अगर हो सके, तो Firebase Cloud Messaging (FCM) का इस्तेमाल करें.

यह पुष्टि करने के लिए कि आपका ऐप्लिकेशन Doze के साथ उम्मीद के मुताबिक काम करता है, adb कमांड का इस्तेमाल करके सिस्टम को Doze में जाने और उससे बाहर निकलने के लिए ज़बरदस्ती किया जा सकता है. साथ ही, आपके ऐप्लिकेशन के काम करने के तरीके पर नज़र रखी जा सकती है. ज़्यादा जानकारी के लिए, बैटरी बचाने (डोज़) और ऐप्लिकेशन स्टैंडबाय मोड के साथ टेस्ट करना लेख पढ़ें.

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

ऐप्लिकेशन स्टैंडबाय की सुविधा की मदद से, सिस्टम यह तय कर पाता है कि जब उपयोगकर्ता किसी ऐप्लिकेशन का इस्तेमाल नहीं कर रहा है, तो वह ऐप्लिकेशन इस्तेमाल में नहीं है. सिस्टम यह फ़ैसला तब लेता है, जब उपयोगकर्ता एक तय समय तक ऐप्लिकेशन को नहीं छूता है और इनमें से कोई भी शर्त लागू नहीं होती है:

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

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

डिवाइस के इस्तेमाल में न होने पर, अपने ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए FCM का इस्तेमाल करना

Firebase क्लाउड से मैसेज (FCM), क्लाउड से डिवाइस पर सूचना भेजने की सेवा है. इसकी मदद से, Android डिवाइसों पर बैकएंड सेवाओं और ऐप्लिकेशन के बीच रीयल-टाइम डाउनस्ट्रीम मैसेजिंग की सुविधा मिलती है. FCM क्लाउड से एक और लगातार कनेक्शन उपलब्ध कराता है. वे सभी ऐप्लिकेशन इस कनेक्शन को शेयर कर सकते हैं, जिन्हें रीयल-टाइम मैसेज की ज़रूरत है. शेयर किया गया यह कनेक्शन, बैटरी की खपत को काफ़ी हद तक ऑप्टिमाइज़ करता है. इससे कई ऐप्लिकेशन के लिए, लगातार अलग-अलग कनेक्शन बनाए रखना ज़रूरी नहीं है. इससे बैटरी तेज़ी से खत्म हो सकती है. इस वजह से, अगर आपके ऐप्लिकेशन को बैकएंड सेवा के साथ मैसेज सेवा को इंटिग्रेट करना ज़रूरी है, तो हमारा सुझाव है कि अगर हो सके, तो आप खुद के नेटवर्क कनेक्शन बनाए रखने के बजाय, FCM का इस्तेमाल करें.

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

ऐसे मैसेज के लिए, सामान्य प्राथमिकता वाले FCM मैसेज का इस्तेमाल करें जिनसे सूचनाएं नहीं मिलती हैं. जैसे, बैकग्राउंड में ऐप्लिकेशन का कॉन्टेंट अप-टू-डेट रखना या डेटा सिंक करना. अगर डिवाइस Doze में नहीं है, तो सामान् य प्राथमिकता वाले मैसेज तुरंत डिलीवर कर दिए जाते हैं. अगर डिवाइस बैटरी बचाएं (डोज़) मोड में है, तो उसे समय-समय पर डोज़ रखरखाव विंडो के दौरान या उपयोगकर्ता के डिवाइस को सक्रिय करते ही डिलीवर किया जाता है.

सबसे सही तरीका यह है कि अगर आपके ऐप्लिकेशन को डाउनस्ट्रीम मैसेज सेवा की ज़रूरत हो, तो FCM का इस्तेमाल करें. अगर आपका ऐप्लिकेशन पहले से ही FCM का इस्तेमाल करता है, तो पक्का करें कि वह ज़्यादा प्राथमिकता वाले मैसेज का इस्तेमाल सिर्फ़ उन मैसेज के लिए करे जिनसे उपयोगकर्ता को सूचनाएं मिलती हैं.

इस्तेमाल के दूसरे उदाहरणों के लिए सहायता

नेटवर्क कनेक्टिविटी, अलार्म, जॉब और सिंक को प्रबंधित करने और FCM संदेशों का उपयोग करके लगभग सभी ऐप्स Doze का समर्थन करने में सक्षम हैं. इस्तेमाल के कुछ खास उदाहरणों में, यह तरीका काफ़ी नहीं है. ऐसे मामलों में, सिस्टम ऐसे ऐप्लिकेशन की सूची उपलब्ध कराता है जिन्हें कॉन्फ़िगर किया जा सकता है. ये ऐप्लिकेशन, Doze और ऐप्लिकेशन के स्टैंडबाय मोड को ऑप्टिमाइज़ करने की सुविधा से कुछ हद तक छूट पाते हैं.

जिस ऐप्लिकेशन को कुछ सुविधाओं से छूट मिली है वह बैटरी चार्ज करने (डोज़) और ऐप्लिकेशन स्टैंडबाय के दौरान नेटवर्क का इस्तेमाल कर सकता है. साथ ही, वह आंशिक वेक लॉक को होल्ड कर सकता है. हालांकि, अन्य पाबंदियां अब भी ऐप्लिकेशन पर लागू होती हैं, जैसे कि अन्य ऐप्लिकेशन पर होती हैं. उदाहरण के लिए, एपीआई लेवल 23 और उससे पहले के वर्शन पर, ऐप्लिकेशन के जॉब और सिंक को बाद में किया जाता है. साथ ही, इसके सामान्य AlarmManager अलार्म नहीं बजते. ऐप्लिकेशन, isIgnoringBatteryOptimizations() को कॉल करके यह देख सकता है कि वह छूट की सूची में शामिल है या नहीं.

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

कोई ऐप्लिकेशन यह देख सकता है कि वह isIgnoringBatteryOptimizations() पर कॉल करके, छूट वाली सूची में शामिल है या नहीं.

बैटरी बचाने (डोज़) और ऐप्लिकेशन स्टैंडबाय मोड की मदद से जांच करना

अपने उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, अपने ऐप्लिकेशन को Doze और ऐप्लिकेशन स्टैंडबाय मोड में पूरी तरह से टेस्ट करें.

Doze मोड की मदद से अपने ऐप्लिकेशन की जांच करना

आप निम्न करके डोज़ मोड का परीक्षण कर सकते हैं:

  1. Android 6.0 (एपीआई लेवल 23) या उसके बाद के वर्शन वाले हार्डवेयर डिवाइस या वर्चुअल डिवाइस को कॉन्फ़िगर करें.
  2. डिवाइस को डेवलपमेंट मशीन से कनेक्ट करें और अपना ऐप्लिकेशन इंस्टॉल करें.
  3. अपना ऐप्लिकेशन चलाएं और उसे चालू रहने दें.
  4. यहां दिया गया कमांड चलाकर, सिस्टम को आइडल मोड में भेजें:
        $ adb shell dumpsys deviceidle force-idle
        
  5. जब आप तैयार हों, तो यह निर्देश देकर, डिवाइस को कुछ समय तक इस्तेमाल न करने वाले मोड से बाहर निकलें:
        $ adb shell dumpsys deviceidle unforce
        
  6. यह निर्देश देकर डिवाइस को फिर से चालू करें:
        $ adb shell dumpsys battery reset
        
  7. डिवाइस को फिर से चालू करने के बाद, अपने ऐप्लिकेशन के काम करने के तरीके पर नज़र रखें. यह पक्का करें कि जब डिवाइस Doze से बाहर निकल जाए, तब ऐप्लिकेशन अच्छी तरह से रिकवर हो जाए.

ऐप्लिकेशन स्टैंडबाय की मदद से अपने ऐप्लिकेशन की जांच करना

अपने ऐप्लिकेशन पर ऐप्लिकेशन स्टैंडबाय मोड की जांच करने के लिए, यह तरीका अपनाएं:

  1. Android 6.0 (एपीआई लेवल 23) या इसके बाद के वर्शन वाले सिस्टम इमेज के साथ, किसी हार्डवेयर डिवाइस या वर्चुअल डिवाइस को कॉन्फ़िगर करें.
  2. डिवाइस को डेवलपमेंट मशीन से कनेक्ट करें और अपना ऐप्लिकेशन इंस्टॉल करें.
  3. अपना ऐप्लिकेशन चलाएं और उसे चालू रहने दें.
  4. ऐप्लिकेशन को ऐप्लिकेशन स्टैंडबाय मोड में भेजने के लिए, ये कमांड चलाएं:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. इन निर्देशों का इस्तेमाल करके, अपने ऐप्लिकेशन को चालू करने की प्रक्रिया को सिम्युलेट करें:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. ऐप्लिकेशन को चालू करने के बाद, उसके काम करने के तरीके पर नज़र रखें. पक्का करें कि ऐप्लिकेशन स्टैंडबाय मोड से ठीक से रिकवर हो जाए. खास तौर पर, देखें कि आपके ऐप्लिकेशन की सूचनाएं और बैकग्राउंड जॉब, उम्मीद के मुताबिक काम कर रहे हैं या नहीं.

छूट के लिए उचित इस्तेमाल के उदाहरण

नीचे दी गई टेबल में, इस्तेमाल के कई उदाहरणों को हाइलाइट किया गया है. साथ ही, यह भी बताया गया है कि इन मामलों में ऐप्लिकेशन के लिए, ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS इंटेंट वाली कार्रवाई का इस्तेमाल करना सही है या नहीं. आम तौर पर, आपका ऐप्लिकेशन इन अपवादों को तब तक पूरा नहीं करता, जब तक Doze या App Standby, ऐप्लिकेशन के मुख्य फ़ंक्शन में रुकावट नहीं डालता. इसके अलावा, किसी तकनीकी वजह से FCM ज़्यादा प्राथमिकता वाले मैसेज इस्तेमाल नहीं किया जा सकता.

ज़्यादा जानकारी के लिए, इस्तेमाल के अन्य उदाहरणों के लिए सहायता देखें.

टाइप इस्तेमाल का उदाहरण क्या FCM का इस्तेमाल किया जा सकता है? क्या छूट मिल सकती है? नोट
झटपट मैसेज करने, चैट करने या कॉल करने के लिए इस्तेमाल होने वाला ऐप्लिकेशन. जब डिवाइस Doze में हो या ऐप्लिकेशन स् टैंडबाय में हो, तब उपयोगकर्ताओं को रीयल-टाइम मैसेज देने की ज़रूरत होती है. हां, FCM का इस्तेमाल किया जा रहा है मान्य नहीं है ऐप्लिकेशन को चालू करने और नेटवर्क को ऐक्सेस करने के लिए, FCM के ज़्यादा प्राथमिकता वाले मैसेज का इस्तेमाल करें.
हां, लेकिन FCM उच्च प्राथमिकता वाले संदेशों का उपयोग नहीं किया जा रहा है.
इंस्टैंट मैसेजिंग, चैट या कॉलिंग ऐप्लिकेशन; एंटरप्राइज़ वीओआईपी ऐप्लिकेशन. नहीं, किसी अन्य मैसेजिंग सेवा पर तकनीकी निर्भरता या Doze और ऐप्लिकेशन स्टैंडबाय मोड की वजह से, FCM का इस्तेमाल नहीं किया जा सकता. ये मोड, ऐप्लिकेशन के मुख्य फ़ंक्शन को बंद कर देते हैं. स्वीकार करने लायक
Safety ऐप्लिकेशन. ऐसे ऐप्लिकेशन जो उनके उपयोगकर्ताओं और उनके परिवार को सुरक्षित रखते हैं. अगर लागू हो. स्वीकार करने लायक
टास्क ऑटोमेशन ऐप्लिकेशन. ऐप्लिकेशन का मुख्य फ़ंक्शन, अपने-आप होने वाली कार्रवाइयों को शेड्यूल करना है. जैसे, इंस्टैंट मैसेज सेवा, वॉइस कॉल या नई फ़ोटो मैनेज करने की सुविधा. अगर लागू हो. स्वीकार करने लायक
सहायक डिवाइस का साथी ऐप्लिकेशन. ऐप्लिकेशन का मुख्य फ़ंक्शन, सहायक डिवाइस को इंटरनेट ऐक्सेस देने के लिए, उससे लगातार कनेक्ट रहना है. अगर लागू हो. स्वीकार करने लायक
ऐप्लिकेशन को सिंक करने के लिए, समय-समय पर सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) से कनेक्ट करने की ज़रूरत होती है या सिर्फ़ स्टैंडर्ड ब्लूटूथ प्रोफ़ाइल का इस्तेमाल करके कनेक्ट किए गए वायरलेस हेडफ़ोन जैसे डिवाइसों से कनेक्ट करने की ज़रूरत होती है. अगर लागू हो. मान्य नहीं है