باستخدام إطار عمل Android، يمكن لمصنّعي الأجهزة ومطوّري التطبيقات استخدام البيانات الحرارية لضمان تجربة مستخدم متّسقة في حال بدء ارتفاع درجة حرارة الجهاز. على سبيل المثال، عندما يتعرّض النظام لضغط حراري، يتم تقييد مهام jobscheduler، وإذا لزم الأمر، يتم بدء إيقاف التشغيل الحراري لإطار العمل. يمكن للتطبيقات التي تتلقّى إشعارات بشأن الضغط الحراري
من خلال معاودة الاتصال المسجّلة في
PowerManager فئة
تعديل تجربة المستخدم بشكل سلس.
واجهة Thermal 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 لأجهزة استشعار USB_PORT وSKIN على التوالي إلى مستوى الخطورة THERMAL_STATUS_EMERGENCY.
الشكل 1: تحذيرات بشأن ارتفاع درجة الحرارة
يتم استرداد درجات الحرارة الحالية لأنواع مختلفة من أجهزة الاستشعار الحرارية من خلال IThermal HAL. تعرض كل عملية استدعاء دالة قيمة حالة SUCCESS أو FAILURE. إذا تم عرض SUCCESS، تستمر العملية. إذا تم عرض FAILURE، يتم إرسال رسالة خطأ، يجب أن تكون قابلة للقراءة، إلى status.debugMessage.
بالإضافة إلى كونها واجهة استطلاع تعرض درجات الحرارة الحالية،
يمكنك استخدام معاودة الاتصال
IThermalChangedCallback (HIDL، الإصدارات Android 10 إلى 13) أو
IThermalChangedCallback (AIDL، الإصدار Android 14 والإصدارات الأحدث)
مع واجهة رد الاتصال من عملاء Thermal HAL، مثل الخدمة الحرارية لإطار العمل. على سبيل المثال، RegisterIThermalChangedCallback وUnregisterIThermalChangedCallback لتسجيل الأحداث التي تم تغيير مستوى خطورتها أو إلغاء تسجيلها. إذا تغيّرت الخطورة الحرارية لجهاز استشعار معيّن، ترسل الدالة notifyThrottling معاودة اتصال بحدث التقييد الحراري إلى مستمعي الأحداث الحرارية.
بالإضافة إلى معلومات جهاز الاستشعار الحراري، يتم عرض قائمة بأجهزة التبريد التي تم تخفيفها في getCurrentCoolingDevices. يظل ترتيب هذه القائمة ثابتًا، حتى إذا كان جهاز التبريد غير متصل بالإنترنت. يمكن لمصنّعي الأجهزة استخدام القائمة لجمع مقاييس statsd.
لمزيد من المعلومات، يُرجى الاطّلاع على التنفيذ المرجعي.
على الرغم من إمكانية إضافة الإضافات الخاصة بك، ننصحك بعدم إيقاف وظيفة التخفيف الحراري.
الخدمة الحرارية
في الإصدار Android 10 والإصدارات الأحدث، توفّر الخدمة الحرارية في إطار العمل مراقبة مستمرة باستخدام إشارات التخفيف المختلفة من Thermal HAL 2.0، وتقدّم ملاحظات حول مستوى خطورة التقييد لعملائها. يشمل هؤلاء العملاء المكوّنات الداخلية وتطبيقات Android. تستخدم الخدمة واجهتَي معاودة اتصال للرابط، وهما IThermalEventListener وIThermalStatusListener، يتم عرضهما كمعاودتَي اتصال. الأولى مخصّصة للاستخدام الداخلي للمنصة والشركة المصنّعة للجهاز، والأخرى مخصّصة لتطبيقات Android.
من خلال واجهات معاودة الاتصال، يمكن استرداد الحالة الحرارية الحالية للجهاز كقيمة عدد صحيح تتراوح بين 0x00000000 (بدون تقييد) و0x00000006 (إيقاف تشغيل الجهاز). لا يمكن الوصول إلى معلومات أداة الاستشعار الحراري التفصيلية ومعلومات الحدث الحراري إلا من خلال خدمة تابعة لنظام التشغيل موثوق بها، مثل واجهة برمجة تطبيقات Android أو واجهة برمجة تطبيقات الشركة المصنّعة للجهاز. يقدّم الشكل التالي نموذجًا لتدفق عملية التخفيف الحراري في الإصدار Android 10 والإصدارات الأحدث:
الشكل 2: تدفق عملية التخفيف الحراري في الإصدار Android 10 والإصدارات الأحدث
إرشادات مصنّعي الأجهزة
للإبلاغ عن حالة جهاز استشعار درجة الحرارة وحالة التقييد في الإصدارات Android 10 إلى 13، يجب على مصنّعي الأجهزة تنفيذ جانب HIDL من Thermal HAL 2.0 (IThermal.hal).
للإبلاغ عن حالة جهاز استشعار درجة الحرارة وحالة التقييد في Android 14، يجب على مصنّعي الأجهزة تنفيذ جانب AIDL من Thermal HAL 2.0 (IThermal.aidl).
يجب الإبلاغ عن أي شيء يقيّد أداء الجهاز، بما في ذلك قيود طاقة البطارية، من خلال Thermal HAL. لضمان حدوث ذلك، ضَع جميع أجهزة الاستشعار التي قد تشير إلى الحاجة إلى التخفيف (استنادًا إلى تغييرات الحالة) في Thermal HAL، وأبلِغ عن مستوى خطورة أي إجراءات تخفيف يتم اتخاذها. لا يجب أن تكون قيمة درجة الحرارة التي يتم عرضها من قراءة جهاز الاستشعار هي درجة الحرارة الفعلية، طالما أنّها تعكس بدقة عتبة الخطورة المقابلة. على سبيل المثال، يمكنك تمرير قيم رقمية مختلفة بدلاً من قيم عتبة درجة الحرارة الفعلية، أو يمكنك إنشاء نطاق حماية في مواصفات العتبة لتوفير التباطؤ. ومع ذلك، يجب أن يتطابق مستوى الخطورة المقابل لهذه القيمة مع ما هو مطلوب عند هذه العتبة. على سبيل المثال، قد تقرّر عرض 72 درجة مئوية كعتبة درجة الحرارة الحرجة، عندما تكون درجة الحرارة الفعلية 65 درجة مئوية، وتتطابق مع مستوى الخطورة الحرجة الذي حدّدته. يجب أن يكون مستوى الخطورة دقيقًا للحصول على أفضل وظائف لإطار العمل الحراري.
استخدام واجهات برمجة التطبيقات الحرارية
يمكن للتطبيقات إضافة المستمعين وإزالتهم، والوصول إلى معلومات الحالة الحرارية
من خلال
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) |
بدون تقييد استخدِم هذه الحالة لتنفيذ إجراءات وقائية، مثل رصد بداية الفترة الزمنية (من 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 لـ Thermal HAL، ويمكنهم استخدام
emul_temp من الـ
kernel sysfs
interface لمحاكاة تغييرات درجة الحرارة.