باستخدام إطار عمل Android، يمكن لمصنعي الأجهزة ومطوري التطبيقات استخدام البيانات الحرارية لضمان تجربة مستخدم متسقة (UX) إذا بدأ الجهاز في السخونة الزائدة. على سبيل المثال، عندما يتعرض النظام لضغط حراري، يتم تقليل وظائف jobscheduler
، وإذا لزم الأمر، يتم بدء إيقاف التشغيل الحراري لإطار العمل. يمكن للتطبيقات التي تتلقى إشعارات الإجهاد الحراري من خلال رد اتصال مسجل في فئة PowerManager
تعديل تجربة المستخدم الخاصة بها بأمان.
هال الحرارية
يستخدم نظام التشغيل 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 والإصدارات الأحدث) مع واجهة رد الاتصال من عملاء HAL الحراري، مثل إطار العمل الخدمة الحرارية. على سبيل المثال، RegisterIThermalChangedCallback
و UnregisterIThermalChangedCallback
لتسجيل الأحداث التي تم تغيير خطورتها أو إلغاء تسجيلها. إذا تغيرت الشدة الحرارية لمستشعر معين، يرسل notifyThrottling
رد اتصال بحدث الاختناق الحراري إلى مستمعي الحدث الحراري.
بالإضافة إلى معلومات المستشعر الحراري، يتم عرض قائمة بأجهزة التبريد المخففة في getCurrentCoolingDevices
. يظل ترتيب هذه القائمة مستمرًا، حتى لو كان جهاز التبريد غير متصل بالإنترنت. يمكن لمصنعي الأجهزة استخدام القائمة لجمع مقاييس statsd
.
لمزيد من المعلومات، راجع التنفيذ المرجعي .
بينما يمكنك إضافة الملحقات الخاصة بك، لا ينبغي عليك تعطيل وظيفة التخفيف الحراري.
الخدمة الحرارية
في نظام التشغيل Android 10 والإصدارات الأحدث، توفر الخدمة الحرارية في الإطار مراقبة مستمرة باستخدام إشارات التخفيف المتنوعة من Thermal HAL 2.0، وتعطي ملاحظات حول خطورة الاختناق لعملائها. يتضمن هؤلاء العملاء مكونات داخلية وتطبيقات Android. تستخدم الخدمة واجهتي رد اتصال Binder، 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
).
يجب الإبلاغ عن أي شيء يعوق أداء الجهاز، بما في ذلك قيود طاقة البطارية، من خلال 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
من واجهة kernel sysfs لمحاكاة التغيرات في درجات الحرارة.