थर्मल मिटिगेशन

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

थर्मल एचएएल

Android 9 और इससे पहले के वर्शन में, तापमान की जानकारी पाने के लिए, Thermal HAL 1.0 में तय किए गए पोलिंग इंटरफ़ेस का इस्तेमाल किया जाता है. इस HAL की मदद से, Android फ़्रेमवर्क और भरोसेमंद क्लाइंट, जैसे कि डिवाइस बनाने वाली कंपनी के HAL, एक ही एपीआई के ज़रिए हर सेंसर के लिए, मौजूदा तापमान और प्रॉडक्ट की नीति के हिसाब से थ्रॉटलिंग और बंद होने की थ्रेशोल्ड वैल्यू पढ़ सकते थे.

Android 10 में, Android फ़्रेमवर्क में थर्मल सिस्टम और एचएएल का नया वर्शन, Thermal HAL 2.0 लॉन्च किया गया था. यह थर्मल सबसिस्टम हार्डवेयर डिवाइसों के इंटरफ़ेस को ऐब्स्ट्रैक्ट करता है. हार्डवेयर इंटरफ़ेस में, त्वचा, बैटरी, जीपीयू, सीपीयू, और यूएसबी पोर्ट के लिए तापमान सेंसर और थर्मिस्टर शामिल होते हैं. डिवाइस की सतह का तापमान, डिवाइस के ज़्यादा गर्म होने की समस्या को ट्रैक करने के लिए सबसे ज़रूरी सिस्टम है. इससे डिवाइस की सतह का तापमान, तय की गई थर्मल लिमिट के अंदर रहता है.

इसके अलावा, Thermal HAL 2.0, कई क्लाइंट को थर्मल सेंसर की रीडिंग और उससे जुड़े गंभीर लेवल की जानकारी देता है, ताकि थर्मल स्ट्रेस के बारे में पता चल सके. नीचे दी गई इमेज में, Android सिस्टम यूज़र इंटरफ़ेस (यूआई) से मिले दो चेतावनी वाले मैसेज दिखाए गए हैं. ये मैसेज तब दिखते हैं, जब USB_PORT और SKIN सेंसर के लिए IThermalEventListener कॉलबैक इंटरफ़ेस, THERMAL_STATUS_EMERGENCY गंभीरता के लेवल पर पहुंच जाता है.

डिवाइस के ज़्यादा गर्म होने की चेतावनियां.

पहली इमेज. डिवाइस के ज़्यादा गर्म होने की चेतावनियां.

अलग-अलग टाइप के थर्मल सेंसर के लिए, मौजूदा तापमान IThermal HAL के ज़रिए हासिल किए जाते हैं. हर फ़ंक्शन कॉल, SUCCESS या FAILURE में से किसी एक की स्थिति वैल्यू दिखाता है. अगर SUCCESS वापस कर दिया जाता है, तो प्रोसेस जारी रहती है. अगर FAILURE को वापस भेजा जाता है, तो status.debugMessage को गड़बड़ी का मैसेज भेजा जाता है. यह मैसेज ऐसा होना चाहिए जिसे आसानी से पढ़ा जा सके.

देखें

यह एक पोलिंग इंटरफ़ेस है, जो मौजूदा तापमान दिखाता है. इसके अलावा, थर्मल एचएएल क्लाइंट से मिले कॉलबैक इंटरफ़ेस के साथ कॉलबैक IThermalChangedCallback (HIDL, Android 10 से 13 तक) या IThermalChangedCallback (AIDL, Android 14 और इसके बाद के वर्शन) का इस्तेमाल किया जा सकता है. जैसे, फ़्रेमवर्क की थर्मल सेवा. उदाहरण के लिए, RegisterIThermalChangedCallback और UnregisterIThermalChangedCallback, गंभीरता में बदलाव वाले इवेंट को रजिस्टर या अनरजिस्टर करने के लिए. अगर किसी सेंसर के तापमान में बदलाव हुआ है, तो notifyThrottling, तापमान से जुड़ी थ्रॉटलिंग का इवेंट कॉलबैक, तापमान से जुड़े इवेंट के लिसनर को भेजता है.

थर्मल सेंसर की जानकारी के साथ-साथ, getCurrentCoolingDevices में डिवाइस को ठंडा करने वाले डिवाइसों की सूची भी दिखाई जाती है. कूलिंग डिवाइस के ऑफ़लाइन होने पर भी, इस सूची का क्रम नहीं बदलता. डिवाइस बनाने वाली कंपनियां, इस सूची का इस्तेमाल statsd मेट्रिक इकट्ठा करने के लिए कर सकती हैं.

ज़्यादा जानकारी के लिए, रेफ़रंस इंप्लीमेंटेशन देखें.

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

थर्मल सेवा

Android 10 और इसके बाद के वर्शन में, फ़्रेमवर्क में मौजूद थर्मल सेवा, थर्मल एचएएल 2.0 से मिले अलग-अलग थ्रॉटलिंग सिग्नल का इस्तेमाल करके लगातार निगरानी करती है. साथ ही, यह अपने क्लाइंट को थ्रॉटलिंग की गंभीरता के बारे में जानकारी देती है. इन क्लाइंट में, इंटरनल कॉम्पोनेंट और Android ऐप्लिकेशन शामिल हैं. यह सेवा, दो बाइंडर कॉलबैक इंटरफ़ेस IThermalEventListener और IThermalStatusListener का इस्तेमाल करती है. इन्हें कॉलबैक के तौर पर दिखाया जाता है. पहला, प्लैटफ़ॉर्म और डिवाइस बनाने वाली कंपनी के अंदरूनी इस्तेमाल के लिए होता है. वहीं, दूसरा Android ऐप्लिकेशन के लिए होता है.

कॉल बैक इंटरफ़ेस के ज़रिए, डिवाइस के तापमान की मौजूदा स्थिति को पूर्णांक वैल्यू के तौर पर पाया जा सकता है. यह वैल्यू 0x00000000 (कोई थ्रॉटलिंग नहीं) से लेकर 0x00000006 (डिवाइस बंद) तक होती है. भरोसेमंद सिस्टम सेवा ही, थर्मल सेंसर और थर्मल इवेंट की पूरी जानकारी ऐक्सेस कर सकती है. जैसे, Android API या डिवाइस बनाने वाली कंपनी का API. इस इमेज में, Android 10 और इसके बाद के वर्शन में, डिवाइस के ज़्यादा गर्म होने की समस्या को कम करने की प्रोसेस का मॉडल दिखाया गया है:

Android 10 और इसके बाद के वर्शन में, तापमान कम करने की प्रोसेस का फ़्लो.

दूसरी इमेज. Android 10 और इसके बाद के वर्शन में, तापमान कम करने की प्रोसेस का फ़्लो.

डिवाइस बनाने वाली कंपनी के दिशा-निर्देश

Android 10 से 13 तक के वर्शन वाले डिवाइसों के लिए, डिवाइस के तापमान सेंसर और थ्रॉटलिंग की स्थिति की जानकारी देने के लिए, डिवाइस बनाने वाली कंपनियों को Thermal HAL 2.0 (IThermal.hal) के HIDL पहलू को लागू करना होगा.

Android 14 के लिए, डिवाइस के तापमान सेंसर और थ्रॉटलिंग की स्थिति की जानकारी देने के लिए, डिवाइस बनाने वाली कंपनियों को Thermal HAL 2.0 (IThermal.aidl) के एआईडीएल पहलू को लागू करना होगा.

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

फ़्रेमवर्क में थ्रेशोल्ड लेवल और वे शमन की कार्रवाइयों से कैसे मेल खाते हैं, इस बारे में ज़्यादा जानने के लिए, थर्मल स्टेटस कोड का इस्तेमाल करना लेख पढ़ें.

थर्मल एपीआई का इस्तेमाल करना

ऐप्लिकेशन, लिसनर जोड़ और हटा सकते हैं. साथ ही, PowerManager क्लास के ज़रिए, डिवाइस के तापमान की जानकारी ऐक्सेस कर सकते हैं. IThermal इंटरफ़ेस, ज़रूरी सभी फ़ंक्शन उपलब्ध कराता है. इनमें थर्मल स्टेटस की वैल्यू दिखाना भी शामिल है. IThermal binder interface को OnThermalStatusChangedListener इंटरफ़ेस के तौर पर रैप किया गया है. ऐप्लिकेशन, थर्मल स्टेटस लिसनर को रजिस्टर या हटाने के दौरान इसका इस्तेमाल कर सकते हैं.

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

  • getCurrentThermalStatus() डिवाइस के तापमान की मौजूदा स्थिति को पूर्णांक के तौर पर दिखाता है. हालांकि, ऐसा तब नहीं होता, जब डिवाइस की परफ़ॉर्मेंस कम हो रही हो.
  • addThermalStatusListener() लिसनर जोड़ता है.
  • removeThermalStatusListener() से, पहले से जोड़े गए श्रोता को हटाया जाता है.

थर्मल स्टेटस कोड का इस्तेमाल करना

थर्मल स्टेटस कोड, थ्रॉटलिंग के खास लेवल में बदलते हैं. इनका इस्तेमाल डेटा इकट्ठा करने और बेहतर यूज़र एक्सपीरियंस डिज़ाइन करने के लिए किया जा सकता है. उदाहरण के लिए, ऐप्लिकेशन को 0x00000000 (THERMAL_STATUS_NONE) स्टेटस मिल सकता है, जो बाद में 0x00000001 (THERMAL_STATUS_LIGHT) में बदल सकता है. 0x00000000 स्टेटस को t0 के तौर पर मार्क करने के बाद, स्टेटस THERMAL_STATUS_NONE से स्टेटस THERMAL_STATUS_LIGHT तक के समय को t1 के तौर पर मेज़र करने से, डिवाइस बनाने वाली कंपनियां इस्तेमाल के खास उदाहरणों के लिए, समस्या कम करने की रणनीतियां डिज़ाइन और टेस्ट कर सकती हैं. नीचे दी गई टेबल में, थर्मल स्टेटस कोड इस्तेमाल करने के सुझाए गए तरीके दिए गए हैं:

डिवाइस के गर्म होने की स्थिति का कोड ब्यौरा और इस्तेमाल के सुझाव
THERMAL_STATUS_NONE (0x00000000) कोई थ्रॉटलिंग लागू नहीं की गई. इस स्टेटस का इस्तेमाल, सुरक्षा से जुड़ी कार्रवाइयां लागू करने के लिए करें. जैसे, THERMAL_STATUS_NONE (0) से THERMAL_STATUS_LIGHT (1) तक की समयावधि (t0 से t1) का पता लगाना.
THERMAL_STATUS_LIGHT (0x00000001) लाइट थ्रॉटलिंग, यूज़र एक्सपीरियंस पर कोई असर नहीं पड़ता. इस चरण के लिए, डिवाइस पर असर डालने वाली समस्या को कम करने के लिए सामान्य तरीके का इस्तेमाल करें. उदाहरण के लिए, बूस्टिंग या कम फ़्रीक्वेंसी का इस्तेमाल न करें. हालांकि, ऐसा सिर्फ़ बड़े कोर पर करें.
THERMAL_STATUS_MODERATE (0x00000002) सामान्य थ्रॉटलिंग, यूज़र एक्सपीरियंस पर ज़्यादा असर नहीं पड़ता. थर्मल मिटिगेशन का असर फ़ोरग्राउंड गतिविधियों पर पड़ता है. इसलिए, ऐप्लिकेशन को तुरंत बिजली की खपत कम करनी चाहिए.
THERMAL_STATUS_SEVERE (0x00000003) थ्रॉटलिंग की गंभीर समस्या है. इससे उपयोगकर्ता अनुभव पर काफ़ी असर पड़ता है. इस चरण में, डिवाइस के तापमान को कम करने की सुविधा को सिस्टम की क्षमता को सीमित करना चाहिए. इस स्थिति में, साइड इफ़ेक्ट हो सकते हैं. जैसे, डिसप्ले जंक और ऑडियो जिटर.
THERMAL_STATUS_CRITICAL (0x00000004) प्लैटफ़ॉर्म ने बैटरी की खपत कम करने के लिए हर ज़रूरी कार्रवाई की है. डिवाइस के थर्मल मिटिगेशन सॉफ़्टवेयर ने सभी कॉम्पोनेंट को उनकी सबसे कम क्षमता पर चलाने के लिए सेट कर दिया है.
THERMAL_STATUS_EMERGENCY (0x00000005) डिवाइस के ज़्यादा गर्म होने की वजह से, प्लैटफ़ॉर्म के मुख्य कॉम्पोनेंट बंद हो रहे हैं. साथ ही, डिवाइस की कुछ सुविधाएं काम नहीं कर रही हैं. यह स्टेटस कोड, डिवाइस बंद होने से पहले दी गई आखिरी चेतावनी को दिखाता है. इस मोड में, मोडेम और सेल्यूलर डेटा जैसे कुछ फ़ंक्शन पूरी तरह से बंद हो जाते हैं.
THERMAL_STATUS_SHUTDOWN (0x00000006) तुरंत बंद कर दें. इस स्टेज की गंभीरता की वजह से, हो सकता है कि ऐप्लिकेशन को यह सूचना न मिले.

डिवाइस बनाने वाली कंपनियों को थर्मल एचएएल के लिए वीटीएस टेस्ट पास करना होगा. साथ ही, वे तापमान में बदलावों को सिम्युलेट करने के लिए, emul_temp का इस्तेमाल कर सकती हैं. यह कर्नेल सिसफ़्स इंटरफ़ेस से मिलता है.