Android फ़्रेमवर्क की मदद से, डिवाइस बनाने वाली कंपनियां और ऐप्लिकेशन डेवलपर, थर्मल डेटा का इस्तेमाल कर सकते हैं. इससे यह पक्का किया जा सकता है कि अगर कोई डिवाइस ज़्यादा गर्म होने लगे, तो भी उपयोगकर्ता को एक जैसा अनुभव (UX) मिलता रहे. उदाहरण के लिए, जब किसी सिस्टम पर ज़्यादा लोड पड़ता है, तो jobscheduler टास्क की स्पीड कम हो जाती है. अगर ज़रूरी हो, तो फ़्रेमवर्क को बंद कर दिया जाता है. PowerManager क्लास में रजिस्टर किए गए कॉलबैक के ज़रिए, जिन ऐप्लिकेशन को थर्मल स्ट्रेस की सूचनाएं मिलती हैं वे अपने यूज़र एक्सपीरियंस को बेहतर तरीके से अडजस्ट कर सकते हैं.
थर्मल एचएएल
Android 9 और इससे पहले के वर्शन में, तापमान की जानकारी पाने के लिए, थर्मल एचएएल 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 और इसके बाद के वर्शन में, फ़्रेमवर्क में मौजूद थर्मल सेवा, थर्मल HAL 2.0 से मिले अलग-अलग सिग्नल का इस्तेमाल करके लगातार निगरानी करती है. साथ ही, अपने क्लाइंट को थ्रॉटलिंग की गंभीरता के बारे में जानकारी देती है. इन क्लाइंट में इंटरनल कॉम्पोनेंट और Android ऐप्लिकेशन शामिल हैं. यह सेवा, दो बाइंडर कॉलबैक इंटरफ़ेस IThermalEventListener और IThermalStatusListener का इस्तेमाल करती है. इन्हें कॉलबैक के तौर पर दिखाया जाता है. पहला, प्लैटफ़ॉर्म और डिवाइस बनाने वाली कंपनी के अंदरूनी इस्तेमाल के लिए होता है. वहीं, दूसरा Android ऐप्लिकेशन के लिए होता है.
कॉल बैक इंटरफ़ेस के ज़रिए, डिवाइस के तापमान की मौजूदा स्थिति को पूर्णांक वैल्यू के तौर पर पाया जा सकता है. इसकी रेंज 0x00000000 (कोई थ्रॉटलिंग नहीं) से लेकर 0x00000006 (डिवाइस बंद) तक होती है. भरोसेमंद सिस्टम सेवा ही, थर्मल सेंसर और थर्मल इवेंट की पूरी जानकारी ऐक्सेस कर सकती है. जैसे, Android API या डिवाइस बनाने वाली कंपनी का API. इस इमेज में, Android 10 और इसके बाद के वर्शन में, डिवाइस के ज़्यादा गर्म होने की समस्या को कम करने की प्रोसेस का मॉडल दिखाया गया है:
दूसरी इमेज. Android 10 और इसके बाद के वर्शन में, डिवाइस के ज़्यादा गर्म होने की समस्या को कम करने की प्रोसेस का फ़्लो.
डिवाइस बनाने वाली कंपनी के दिशा-निर्देश
Android 10 से 13 तक के वर्शन वाले डिवाइसों के लिए, डिवाइस के तापमान मापने वाले सेंसर और थ्रॉटलिंग की स्थिति की जानकारी देने के लिए, डिवाइस बनाने वाली कंपनियों को Thermal HAL 2.0 (IThermal.hal) के HIDL पहलू को लागू करना होगा.
Android 14 के लिए, डिवाइस के तापमान मापने वाले सेंसर और थ्रॉटलिंग की स्थिति की जानकारी देने के लिए, डिवाइस बनाने वाली कंपनियों को Thermal HAL 2.0 (IThermal.aidl) के एआईडीएल पहलू को लागू करना होगा.
डिवाइस की परफ़ॉर्मेंस को कम करने वाली किसी भी चीज़ की जानकारी, थर्मल एचएएल के ज़रिए दी जानी चाहिए. इसमें बैटरी की पावर से जुड़ी पाबंदियां भी शामिल हैं. यह पक्का करने के लिए कि ऐसा हो, उन सभी सेंसर को थर्मल एचएएल में रखें जो स्थिति में बदलाव के आधार पर, थ्रॉटलिंग की ज़रूरत के बारे में बता सकते हैं. साथ ही, थ्रॉटलिंग से जुड़ी किसी भी कार्रवाई की गंभीरता के बारे में बताएं. सेंसर की रीडिंग से मिली तापमान की वैल्यू, असल तापमान से अलग हो सकती है. हालांकि, यह ज़रूरी है कि यह वैल्यू, गंभीरता के थ्रेशोल्ड को सटीक तरीके से दिखाए. उदाहरण के लिए, तापमान के थ्रेशोल्ड की असल वैल्यू के बजाय, अलग-अलग संख्यात्मक वैल्यू पास की जा सकती हैं. इसके अलावा, हिस्टेरेसिस की सुविधा देने के लिए, थ्रेशोल्ड की खास बातों में गार्डबैंडिंग की सुविधा जोड़ी जा सकती है. हालांकि, उस वैल्यू से जुड़ी गंभीरता का लेवल, थ्रेशोल्ड के हिसाब से होना चाहिए. उदाहरण के लिए, हो सकता है कि असल तापमान 65°C होने पर, आपने क्रिटिकल तापमान थ्रेशोल्ड के तौर पर 72°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) |
तुरंत बंद कर दें. इस स्टेज की गंभीरता की वजह से, हो सकता है कि ऐप्लिकेशन को यह सूचना न मिले. |
डिवाइस बनाने वाली कंपनियों को थर्मल एचएएल के लिए वीटीएस टेस्ट पास करना होगा. साथ ही, तापमान में बदलावों को सिम्युलेट करने के लिए, कर्नेल sysfs इंटरफ़ेस से emul_temp का इस्तेमाल करना होगा.