थर्मल कम करने की सुविधा

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

थर्मल एचएएल

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

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

इसके अलावा, Thermal HAL 2.0 कई क्लाइंट को थर्मल सेंसर की रीडिंग और उससे जुड़े गंभीरता के लेवल की जानकारी देता है, ताकि थर्मल स्ट्रेस का पता लगाया जा सके. नीचे दिए गए डायग्राम में, Android System के यूज़र इंटरफ़ेस (यूआई) से चेतावनी वाले दो मैसेज दिखाए गए हैं. ये मैसेज तब दिखते हैं, जब 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 और उसके बाद के वर्शन में, फ़्रेमवर्क में मौजूद थर्मल सेवा, Thermal HAL 2.0 से लिए गए उत्सर्जन कम करने के अलग-अलग सिग्नल का इस्तेमाल करके लगातार निगरानी करती है. साथ ही, अपने क्लाइंट को गंभीरता से बचने के लिए सुझाव देती है. इन क्लाइंट में इंटरनल कॉम्पोनेंट और Android ऐप्लिकेशन शामिल होते हैं. यह सेवा, दो बाइंडर कॉलबैक इंटरफ़ेस, IThermalEventListener और IThermalStatusListener का इस्तेमाल करती है. इन्हें कॉलबैक के तौर पर दिखाया जाता है. पहला, प्लैटफ़ॉर्म और डिवाइस बनाने वाली कंपनी के अंदरूनी इस्तेमाल के लिए है. दूसरा, Android ऐप्लिकेशन के लिए है.

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

Android 10 और उसके बाद के वर्शन में, डिवाइस के गर्म होने से जुड़ी समस्या को कम करने की प्रोसेस का फ़्लो.

दूसरी इमेज. Android 10 और उसके बाद के वर्शन में, डिवाइस के गर्म होने से जुड़ी समस्या को कम करने की प्रोसेस का फ़्लो.

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

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

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

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

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

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

ऐप्लिकेशन, PowerManager क्लास की मदद से, सुनने वालों को जोड़ और हटा सकते हैं. साथ ही, थर्मल स्टेटस की जानकारी ऐक्सेस कर सकते हैं. IThermal इंटरफ़ेस में, ज़रूरी सभी फ़ंक्शन मौजूद होते हैं. इनमें, थर्मल स्टेटस की वैल्यू दिखाना भी शामिल है. IThermal बाइंडर इंटरफ़ेस को 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) तुरंत बंद करें. इस चरण की गंभीरता की वजह से, हो सकता है कि ऐप्लिकेशन को यह सूचना न मिले.

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