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

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

थर्मल एचएएल

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

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

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

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

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

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

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

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

बैटरी की पावर से जुड़ी पाबंदियों के साथ-साथ, डिवाइस की परफ़ॉर्मेंस को कम करने वाली किसी भी चीज़ की शिकायत, थर्मल एचएएल के ज़रिए की जानी चाहिए. यह पक्का करने के लिए, उन सभी सेंसर को थर्मल एचएएल में डालें जिनसे स्टेटस में हुए बदलावों के आधार पर, समस्या को कम करने की ज़रूरत का पता चल सकता है. साथ ही, समस्या को कम करने के लिए की गई किसी भी कार्रवाई की गंभीरता की रिपोर्ट दें. सेंसर की रीडिंग से मिली तापमान की वैल्यू, ज़रूरी नहीं है कि वह असल तापमान हो. हालांकि, यह ज़रूरी है कि वह गंभीरता के थ्रेशोल्ड को सही तरीके से दिखाए. उदाहरण के लिए, तापमान के थ्रेशोल्ड की असल वैल्यू के बजाय, अलग-अलग संख्याएं दी जा सकती हैं. इसके अलावा, हिस्टैरेसीस देने के लिए, थ्रेशोल्ड की खास बातों में गार्डबैंडिंग बनाई जा सकती है. हालांकि, उस वैल्यू के लिए तय की गई गंभीरता, उस थ्रेशोल्ड के लिए तय की गई गंभीरता से मेल खानी चाहिए. उदाहरण के लिए, हो सकता है कि आपने तापमान के लिए तय किया हो कि 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 का इस्तेमाल किया जा सकता है.