باستخدام إطار عمل 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، من Android 10 إلى 13) أو
IThermalChangedCallback
(AIDL، من Android 14 والإصدارات الأحدث)
مع واجهة الاستدعاء من عملاء HAL الحراري، مثل
الخدمة الحرارية للإطار. على سبيل المثال، RegisterIThermalChangedCallback
و
UnregisterIThermalChangedCallback
لتسجيل أو إلغاء تسجيل
الأحداث التي تغيّرت فيها الخطورة إذا تغيّرت شدة الحرارة لجهاز استشعار معيّن، تُرسِل notifyThrottling
طلب استدعاء لحدث الحدّ من السرعة بسبب الحرارة إلى مستمعي أحداث الحرارة.
بالإضافة إلى معلومات أدوات الاستشعار الحرارية، يتم عرض قائمة بأجهزة التبريد التي تم تخفيف تأثيرها
في getCurrentCoolingDevices
. يبقى ترتيب هذه القائمة ثابتًا، حتى
إذا توقّف جهاز تبريد عن الاتصال بالإنترنت. يمكن لصنّاع الأجهزة استخدام القائمة لجمع statsd
مقياس.
لمزيد من المعلومات، يُرجى الاطّلاع على التطبيق المرجعي.
على الرغم من أنّه يمكنك إضافة الإضافات الخاصة بك، يجب عدم إيقاف وظيفة التخفيف من الآثار الحرارية.
خدمة حرارية
في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث، توفّر خدمة إدارة الحرارة في إطار العمل عملية مراقبة باستمرار باستخدام إشارات التخفيف المختلفة من Thermal HAL 2.0، وتوفّر ملاحظات بشأن شدة الحدّ من الأداء إلى العملاء. وتشمل هذه التطبيقات المكوّنات العميقة
وتطبيقات Android. تستخدم الخدمة واجهتَي ردّ اتصال للرابط،
IThermalEventListener
وIThermalStatusListener
، تم عرضهما كعمليّتَي ردّ اتصال. ويُستخدَم الإصدار السابق داخليًا من قِبل المصنّعين للأجهزة والأنظمة الأساسية، بينما يُستخدَم الإصدار التالي
لتطبيقات Android.
من خلال واجهات طلب إعادة الاتصال، يمكن retrieving
الحصول على الحالة الحرارية الحالية للجهاز كقيمة عددية تتراوح بين 0x00000000
(بدون خفض السرعة) و0x00000006
(إيقاف الجهاز). لا يمكن لواجهة برمجة تطبيقات إلا الوصول إلى معلومات جهاز الاستشعار الحراري المفصّلة
ومعلومات الأحداث الحرارية، وذلك إذا كانت واجهة برمجة التطبيقات هذه موثوقًا بها، مثل
Android API أو واجهة برمجة التطبيقات الخاصة بشركة المصنّع للجهاز. يقدّم الشكل التالي نموذجًا لمسار عملية التخفيف من الحرارة في الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث:
الشكل 2: مسار عملية الحد من التأثير الحراري في الإصدار 10 من Android والإصدارات الأحدث
إرشادات الشركات المصنّعة للأجهزة
للإبلاغ عن حالة استشعار درجة حرارة الجهاز ووضع التباطؤ في الإصدارات من Android 10 إلى
13، على الشركات المصنّعة للأجهزة تنفيذ جانب HIDL من Thermal
HAL 2.0 (IThermal.hal
).
للإبلاغ عن أداة استشعار درجة حرارة الجهاز وحالة الحدّ من السرعة في نظام التشغيل Android
14، على الشركات المصنّعة للأجهزة تنفيذ جانب 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 للنواة
لمحاكاة تغييرات درجة الحرارة.