باستخدام إطار عمل Android، يمكن لصنّاع الأجهزة ومطوّري التطبيقات استخدام
البيانات الحرارية لضمان تجربة مستخدم متّسقة في حال بدأ الجهاز في
السخونة الزائدة. على سبيل المثال، عندما يتعرض النظام لضغط حراري، يتم تقييد وظائف
jobscheduler
وبدء عملية
إيقاف حراري للإطار إذا لزم الأمر. يمكن للتطبيقات التي تتلقّى إشعارات بدرجات الحرارة القصوى
من خلال طلب إعادة اتصال مسجَّل في PowerManager
class
تعديل تجربة المستخدم بسلاسة.
HAL الحراري
يستخدم نظام التشغيل Android 9 والإصدارات الأقدم واجهة طلب تحديد الموقع المحدّدة في Thermal HAL 1.0 للحصول على قراءات درجة الحرارة. سمحت حزمة HAL هذه لإطار عمل Android والعملاء الموثوق بهم الآخرين، مثل حزمة HAL الخاصة بصانع الجهاز، بقراءة الحدود القصوى الحالية للحدّ من السرعة والإيقاف والتي تخصّ سياسة المنتج لكل أداة استشعار من خلال واجهة برمجة التطبيقات نفسها.
قدّم نظام التشغيل Android 10 نظامًا حراريًا في إطار عمل Android وإصدارًا جديدًا من HAL، وهو Thermal HAL 2.0، الذي يقدّم واجهة مجردة لأجهزة المنظومة الفرعية الحرارية. تشمل واجهة الجهاز أجهزة استشعار الحرارة ودرجة الحرارة للجلد والبطارية ووحدة معالجة الرسومات ووحدة المعالجة المركزية ومنفذ USB. إنّ درجة حرارة سطح الجهاز هي أهم نظام يجب تتبُّعه للحفاظ على درجة حرارة سطح الجهاز ضمن الحدود الحرارية المحدّدة.
بالإضافة إلى ذلك، يقدّم Thermal HAL 2.0 قراءات
لأجهزة استشعار الحرارة ومستويات الخطورة المرتبطة بها لعدة عملاء للإشارة إلى الضغط الحراري. ويعرض الشكل التالي رسالتَي تحذير من واجهة مستخدم نظام Android. يتم عرض هذه الرسائل عندما تصل واجهةIThermalEventListener
callback
لجهازَي الاستشعارUSB_PORT
وSKIN
، على التوالي، إلى
مستوى الخطورةTHERMAL_STATUS_EMERGENCY
.
الشكل 1: التحذيرات من ارتفاع درجة الحرارة
يتم استرداد درجات الحرارة الحالية لمختلف
أنواع أدوات استشعار الحرارة من خلال
IThermal HAL. تُعرِض كلّ طلب دالة
قيمة حالة إما SUCCESS
أو FAILURE
. إذا تم عرض SUCCESS
، تتم مواصلة العملية. في حال عرض FAILURE
، سيتم إرسال رسالة خطأ إلى status.debugMessage
، يجب أن تكون سهلة القراءة للمستخدم.
بالإضافة إلى كونها واجهة استطلاع تعرض درجات الحرارة الحالية،
يمكنك استخدام دالة الاستدعاء
IThermalChangedCallback
(HIDL، من الإصدار 10 من Android إلى الإصدار 13) أو
IThermalChangedCallback
(AIDL، من الإصدار 14 من Android والإصدارات الأحدث)
مع واجهة الاستدعاء من عملاء HAL الحراري، مثل
الخدمة الحرارية للإطار. على سبيل المثال، RegisterIThermalChangedCallback
وUnregisterIThermalChangedCallback
لتسجيل أو إلغاء تسجيل الأحداث التي تغيّرت درجة الخطورة. إذا تغيّرت شدة الحرارة لجهاز استشعار معيّن، تُرسِل notifyThrottling
طلب استدعاء لحدث الحدّ من السرعة بسبب الحرارة إلى مستمعي أحداث الحرارة.
بالإضافة إلى معلومات أداة الاستشعار الحراري، يتم عرض قائمة بأجهزة التبريد التي تم تخفيف تأثيرها
في getCurrentCoolingDevices
. ويكون ترتيب هذه القائمة ثابتًا حتى في حال انقطاع اتصال
جهاز التبريد بالإنترنت. يمكن لصنّاع الأجهزة استخدام القائمة لجمع statsd
مقياس.
لمزيد من المعلومات، يُرجى الاطّلاع على التطبيق المرجعي.
على الرغم من أنّه يمكنك إدراج الإضافات الخاصة بك، عليك عدم إيقاف وظيفة التخفيف الحراري.
الخدمة الحرارية
في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث، توفّر خدمة إدارة الحرارة في إطار العمل عملية مراقبة باستمرار باستخدام إشارات التخفيف المختلفة من Thermal HAL 2.0، وتوفّر ملاحظات بشأن شدة الحدّ من الأداء إلى العملاء. وتشمل هذه التطبيقات المكوّنات العميقة
وتطبيقات Android. تستخدِم الخدمة واجهتَي ردّ اتصال للرابط،
IThermalEventListener
وIThermalStatusListener
، يتم عرضهما كعمليّتَي ردّ اتصال. ويُستخدَم الإصدار السابق داخليًا من قِبل المصنّعين للأجهزة والأنظمة الأساسية، بينما يُستخدَم الإصدار التالي
لتطبيقات Android.
من خلال واجهات طلب إعادة الاتصال، يمكن retrieving (استرداد) الحالة الحرارية الحالية للجهاز كقيمة عددية تتراوح بين 0x00000000
(بدون خفض السرعة) و0x00000006
(إيقاف الجهاز). يمكن لأي خدمة نظام موثوق بها، مثل واجهة برمجة تطبيقات Android أو واجهة برمجة تطبيقات الشركة المصنِّعة للجهاز، الوصول إلى معلومات المستشعر الحراري المفصَّلة ومعلومات الأحداث الحرارية. يقدّم الشكل التالي نموذجًا لمسار عملية التخفيف من الحرارة في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث:
الشكل 2: مسار عملية الحد من التأثير الحراري في الإصدار 10 من Android والإصدارات الأحدث
إرشادات الشركة المصنّعة للجهاز
للإبلاغ عن حالة استشعار درجة حرارة الجهاز ووضع التباطؤ في الإصدارات من Android 10 إلى
13، على الشركات المصنّعة للأجهزة تنفيذ جانب HIDL من Thermal
HAL 2.0 (IThermal.hal
).
للإبلاغ عن أداة استشعار درجة حرارة الجهاز وحالة الحدّ من السرعة في الإصدار 14 من نظام التشغيل Android، على الشركات المصنّعة للأجهزة تنفيذ جانب AIDL
لواجهة برمجة التطبيقات Thermal HAL 2.0 (IThermal.aidl
).
يجب الإبلاغ عن أي عوامل تؤدي إلى إبطاء أداء الجهاز، بما في ذلك القيود المفروضة على طاقة البطارية، من خلال واجهة HAL الحرارية. لضمان حدوث ذلك، أدرِج جميع الحساسات التي قد تشير إلى الحاجة إلى تخفيف الحرارة (استنادًا إلى التغيُّرات في الحالة) في HAL الحراري، وأبلِغ عن شدة أي إجراءات تم اتّخاذها للتخفيف من الحرارة. ليس من الضروري أن تكون قيمة درجة الحرارة الناتجة من قراءة جهاز الاستشعار درجة الحرارة الفعلية، ما دامت تعكس بدقة درجة الخطورة المطابقة. على سبيل المثال، يمكنك ضبط قيم عددية مختلفة بدلاً من قيم الحدود الدنيا الفعلية للحرارة، أو يمكنك إنشاء حدود وقائية في مواصفات الحدود الدنيا لتوفير التباطؤ. ومع ذلك، يجب أن تتطابق الخطورة المقابلة لهذه القيمة مع ما هو مطلوب عند هذا الحدّ. على سبيل المثال، يمكنك اختيار عرض 72 درجة مئوية كحدود الحدّ الحرج لدرجة الحرارة، عندما تكون درجة الحرارة الفعلية 65 درجة مئوية، ويكون ذلك متوافقًا مع مستوى الخطورة الحرجة الذي حدّدته. يجب أن يكون مستوى الخطورة دقيقًا للحصول على أفضل وظيفة للإطار الحراري.
للاطّلاع على مزيد من المعلومات عن مستويات الحدود الحرارية في إطار العمل وكيفية توافقها مع إجراءات التخفيف، يُرجى الاطّلاع على مقالة استخدام رموز الحالة الحرارية.
استخدام واجهات برمجة التطبيقات الحرارية
يمكن للتطبيقات إضافة مستمعين وإزالتهم والوصول إلى معلومات الحالة الحرارية
من خلال استخدام
فئة
PowerManager
.
توفّر الواجهة IThermal
جميع الوظائف المطلوبة، بما في ذلك
عرض قيم الحالة الحرارية. يتم لف
واجهة IThermal binder
كواجهة 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 ) |
بدون تقييد استخدِم هذه الحالة لتنفيذ إجراءات وقائية، مثل رصد بداية الفترة الزمنية (من t0 إلى t1) من THERMAL_STATUS_NONE (0 ) إلى THERMAL_STATUS_LIGHT (1 ). |
THERMAL_STATUS_LIGHT (0x00000001 ) |
يتمّ الحدّ من السرعة قليلاً، ولا تتأثّر تجربة المستخدم. استخدِم استراتيجية تخفيف تأثير الجهاز بشكل لطيف في هذه المرحلة. على سبيل المثال، يمكنك تخطّي زيادة أو استخدام الترددات غير الفعّالة، ولكن فقط على النوى الكبيرة. |
THERMAL_STATUS_MODERATE (0x00000002 ) |
يتمّ الحدّ من السرعة بشكلٍ معتدل، ولا تتأثّر تجربة المستخدم بشكلٍ كبير. تؤثر إجراءات الحد من الحرارة في الأنشطة التي تعمل في المقدّمة، لذا من المفترض أن تقلّل التطبيقات من استهلاك الطاقة على الفور. |
THERMAL_STATUS_SEVERE (0x00000003 ) |
تمّ الحدّ من السرعة بشكل كبير، ما يؤثّر بشكل كبير في تجربة المستخدم. في هذه المرحلة، من المفترض أن تحدّ أنظمة الحدّ من الحرارة في الجهاز من قدرة النظام. وقد تؤدي هذه الحالة إلى حدوث تأثيرات جانبية، مثل عدم ثبات الشاشة والصوت. |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
اتّخذت المنصة كل الإجراءات اللازمة لتقليل استهلاك الطاقة. فعَّل برنامج الحد من الحرارة في الجهاز جميع المكوّنات لتعمل بأقل طاقتها. |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
يتم إيقاف المكونات الرئيسية في المنصة بسبب الظروف الحرارية، وتكون وظائف الجهاز محدودة. يمثّل رمز الحالة هذا التحذير الأخير قبل إيقاف تشغيل الجهاز. في هذه الحالة، يتم إيقاف بعض الوظائف تمامًا، مثل المودم وبيانات شبكة الجوّال. |
THERMAL_STATUS_SHUTDOWN (0x00000006 ) |
أغلِق الجهاز على الفور. بسبب خطورة هذه المرحلة، قد لا تتمكّن التطبيقات من تلقّي هذا الإشعار. |
على المصنّعين اجتياز اختبار VTS لواجهة HAL الحرارية، ويمكنهم استخدام
emul_temp
من واجهة
sysfs للنواة
لمحاكاة تغييرات درجة الحرارة.