עם מסגרת Android, יצרני מכשירים ומפתחי אפליקציות יכולים להשתמש בנתונים תרמיים כדי להבטיח חווית משתמש עקבית (UX) אם מכשיר מתחיל להתחמם יתר על המידה. לדוגמה, כאשר מערכת עוברת לחץ תרמי, jobscheduler
התפקידים מצטמצמות, ובמידת הצורך, מתחילה כיבוי תרמי של המסגרת. אפליקציות שמקבלות התראות על מתח תרמי באמצעות התקשרות חוזרת רשומה במחלקת PowerManager
יכולות להתאים בחן את ה-UX שלהן.
HAL תרמי
אנדרואיד 9 ומטה משתמשות בממשק סקר המוגדר ב-Thermal HAL 1.0 כדי לקבל קריאות טמפרטורה. HAL זה אפשר למסגרת אנדרואיד וללקוחות מהימנים אחרים, כגון HAL של יצרן מכשירים, לקרוא את ספי הגז והכיבוי הספציפיים לטמפרטורה ומדיניות המוצר עבור כל חיישן דרך אותו API.
אנדרואיד 10 הציגה מערכת תרמית במסגרת אנדרואיד וגרסה חדשה של ה-HAL, Thermal HAL 2.0, שמפשטת את הממשק להתקני החומרה של תת-המערכת התרמית. ממשק החומרה כולל חיישני טמפרטורה ותרמיסטורים לעור, סוללה, GPU, CPU ויציאת USB. טמפרטורת העור של המכשיר היא המערכת החשובה ביותר למעקב כדי לשמור על טמפרטורת פני המכשיר בגבולות התרמיים שצוינו.
בנוסף, Thermal HAL 2.0 מספק ללקוחות מרובים קריאות חיישנים תרמיים ורמות חומרה נלוות לציון מתח תרמי. האיור הבא מציג שתי הודעות אזהרה מממשק המשתמש של מערכת אנדרואיד. הודעות אלה מוצגות כאשר ממשק ה-Callback IThermalEventListener
עבור חיישני USB_PORT
ו- SKIN
, בהתאמה, מגיעים לרמת החומרה THERMAL_STATUS_EMERGENCY
.
איור 1. אזהרות התחממות יתר.
הטמפרטורות הנוכחיות מאוחזרות עבור הסוגים השונים של חיישנים תרמיים באמצעות ITthermal HAL . כל קריאת פונקציה מחזירה ערך סטטוס של SUCCESS
או FAILURE
. אם SUCCESS
מוחזר, התהליך ממשיך. אם מוחזר FAILURE
, הודעת שגיאה, שחייבת להיות קריאה אנושית, נשלחת אל status.debugMessage
.
בנוסף להיותו ממשק סקר המחזיר את הטמפרטורות הנוכחיות, ניתן להשתמש ב-Callback IThermalChangedCallback
(HIDL, Android 10 עד 13) או IThermalChangedCallback
(AIDL, Android 14 ומעלה) עם ממשק ה-Callback מלקוחות HAL תרמיים, כמו המסגרת של המסגרת. שירות תרמי. לדוגמה, RegisterIThermalChangedCallback
ו- UnregisterIThermalChangedCallback
כדי לרשום או לבטל רישום של אירועים שהשתנו בחומרה. אם החומרה התרמית של חיישן נתון השתנתה, notifyThrottling
שולח התקשרות חוזרת של אירוע מצערת תרמית למאזיני אירוע תרמי.
בנוסף למידע על חיישן תרמי, רשימה של התקני קירור מופחתים נחשפת ב- getCurrentCoolingDevices
. סדר הרשימה הזה הוא קבוע, גם אם מכשיר קירור ירד למצב לא מקוון. יצרני מכשירים יכולים להשתמש ברשימה כדי לאסוף מדדים statsd
.
למידע נוסף, עיין ביישום הפניות .
למרות שאתה יכול להוסיף הרחבות משלך, אתה לא צריך להשבית את פונקציית הפחתת התרמית.
שירות תרמי
באנדרואיד 10 ומעלה, השירות התרמי במסגרת מספק ניטור מתמיד באמצעות אותות ההפחתה השונים מ-Thermal HAL 2.0, ונותן משוב על חומרת המצערת ללקוחותיו. לקוחות אלה כוללים רכיבים פנימיים ואפליקציות אנדרואיד. השירות משתמש בשני ממשקי התקשרות חוזרת של מקשר, IThermalEventListener
ו- IThermalStatusListener
, הנחשפים כהתקשרויות חוזרות. הראשון מיועד לשימוש פנימי בפלטפורמה ויצרן מכשירים, והשני מיועד לאפליקציות אנדרואיד.
באמצעות ממשקי ה-callback, המצב התרמי הנוכחי של מכשיר ניתן לאחזור כערך שלם שנע בין 0x00000000
(ללא מצערת) ל 0x00000006
(כיבוי מכשיר). רק שירות מערכת מהימן, כגון API של Android או API של יצרן המכשיר, יכול לגשת לחיישן התרמי המפורט ולמידע על אירועים תרמיים. האיור הבא מספק מודל של זרימת תהליך הפחתת תרמית באנדרואיד 10 ואילך:
איור 2. זרימת תהליך הפחתת תרמית באנדרואיד 10 ומעלה.
הנחיות יצרן המכשיר
כדי לדווח על חיישן טמפרטורת המכשיר ומצב המצערת עבור Android 10 עד 13, יצרני המכשיר חייבים ליישם את היבט ה-HIDL של Thermal HAL 2.0 ( IThermal.hal
).
כדי לדווח על חיישן טמפרטורת המכשיר ומצב המצערת עבור Android 14, יצרני המכשירים חייבים ליישם את היבט ה-AIDL של Thermal HAL 2.0 ( IThermal.aidl
).
יש לדווח על כל דבר שמצמצם את ביצועי המכשיר, כולל אילוצי כוח סוללה, דרך ה-HAL התרמי. כדי להבטיח שזה יקרה, הכניסו את כל החיישנים שעלולים להצביע על צורך בהפחתה (בהתבסס על שינויי סטטוס) ב-HAL התרמי, ודווחו על חומרת כל פעולות ההפחתה שננקטו. ערך הטמפרטורה המוחזר מקריאת חיישן לא חייב להיות הטמפרטורה בפועל, כל עוד הוא משקף במדויק את סף החומרה המתאים. לדוגמה, אתה יכול להעביר ערכים מספריים שונים במקום ערכי סף הטמפרטורה האמיתיים שלך, או שאתה יכול לבנות guardbanding לתוך מפרטי סף כדי לספק היסטרזיס. עם זאת, החומרה התואמת לערך הזה חייבת להתאים למה שנדרש באותו סף. לדוגמה, ייתכן שתחליט להחזיר 72 מעלות צלזיוס כסף הטמפרטורה הקריטי שלך, כאשר הטמפרטורה בפועל היא 65 מעלות צלזיוס, והיא תואמת את החומרה הקריטית שציינת. רמת החומרה חייבת להיות מדויקת לפונקציונליות המסגרת התרמית הטובה ביותר.
כדי לקרוא עוד על רמות הסף במסגרת וכיצד הן מתאימות לפעולות הפחתה, ראה שימוש בקודי מצב תרמיים .
השתמש בממשקי API תרמיים
אפליקציות יכולות להוסיף ולהסיר מאזינים, ולגשת למידע על מצב תרמי דרך מחלקת PowerManager
. ממשק IThermal
מספק את כל הפונקציונליות הדרושה, כולל החזרת ערכי המצב התרמי. ממשק ה-ITthermal binder עטוף כממשק OnThermalStatusChangedListener
, שבו אפליקציות יכולות להשתמש בעת רישום או הסרה של מאזיני סטטוס תרמי.
לממשקי ה-API התרמיים של אנדרואיד יש גם שיטות התקשרות חוזרות וגם שיטות סקר לאפליקציות לקבל הודעה על רמות החומרה התרמית באמצעות קודי סטטוס, המוגדרים במחלקת PowerManager
. השיטות הן:
-
getCurrentThermalStatus()
מחזירה את המצב התרמי הנוכחי של ההתקן כמספר שלם, אלא אם המכשיר עובר מצערת. -
addThermalStatusListener()
מוסיף מאזין. -
removeThermalStatusListener()
מסיר מאזין שנוסף בעבר.
השתמש בקודי מצב תרמיים
קודי המצב התרמי מתורגמים לרמות מצערת ספציפיות, בהן תוכל להשתמש לאיסוף נתונים ולעיצוב UX אופטימלי. לדוגמה, אפליקציות עשויות לקבל סטטוס של 0x00000000
( THERMAL_STATUS_NONE
), שעשוי להשתנות מאוחר יותר ל 0x00000001
( THERMAL_STATUS_LIGHT
). סימון המצב 0x00000000
כ-t0, ולאחר מכן מדידת הזמן שחלף מהסטטוס THERMAL_STATUS_NONE
לסטטוס THERMAL_STATUS_LIGHT
כ-t1 מאפשר ליצרני מכשירים לתכנן ולבדוק אסטרטגיות הפחתה עבור מקרי שימוש ספציפיים. הטבלה הבאה מתארת דרכים מוצעות לשימוש בקודי המצב התרמי:
קוד מצב תרמי | תיאור ומוצע לשימוש |
---|---|
THERMAL_STATUS_NONE ( 0x00000000 ) | אין מצערת. השתמש בסטטוס זה כדי ליישם פעולות הגנה, כגון זיהוי תחילת פרק הזמן (t0 עד t1) מ- THERMAL_STATUS_NONE ( 0 ) ל- THERMAL_STATUS_LIGHT ( 1 ). |
THERMAL_STATUS_LIGHT ( 0x00000001 ) | מצערת קלה, ה-UX לא מושפע. השתמש בהפחתת התקן עדינה לשלב זה. לדוגמה, דלג על הגברת או שימוש בתדרים לא יעילים, אבל רק על ליבות גדולות. |
THERMAL_STATUS_MODERATE ( 0x00000002 ) | מצערת מתונה, UX לא מושפע במיוחד. הפחתת תרמית משפיעה על פעילויות החזית, ולכן אפליקציות צריכות להפחית את החשמל באופן מיידי. |
THERMAL_STATUS_SEVERE ( 0x00000003 ) | מצערת חמורה; UX מושפע במידה רבה. בשלב זה, הפחתה תרמית של המכשיר צריכה להגביל את קיבולת המערכת. מצב זה עלול לגרום לתופעות לוואי, כגון ריצוד מסך וריצוד שמע. |
THERMAL_STATUS_CRITICAL ( 0x00000004 ) | הפלטפורמה עשתה הכל כדי להפחית את הכוח. תוכנת ההפחתה התרמית של המכשיר הציבה את כל הרכיבים לפעול בקיבולת הנמוכה ביותר שלהם. |
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) | רכיבי מפתח בפלטפורמה מושבתים עקב תנאים תרמיים ופונקציונליות המכשיר מוגבלת. קוד סטטוס זה מייצג את האזהרה האחרונה לפני כיבוי המכשיר. במצב זה, חלק מהפונקציות, כגון המודם והנתונים הסלולריים, כבויות לחלוטין. |
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) | סגור מיד. בשל חומרת השלב הזה, ייתכן שאפליקציות לא יוכלו לקבל הודעה זו. |
יצרני התקנים חייבים לעבור את מבחן ה-VTS עבור HAL תרמי, ויכולים להשתמש emul_temp
מממשק הקרנל sysfs כדי לדמות שינויי טמפרטורה.