Dengan framework Android, produsen perangkat dan developer aplikasi dapat menggunakan
data termal untuk memastikan pengalaman pengguna (UX) yang konsisten jika perangkat mulai
terlalu panas. Misalnya, saat sistem mengalami tekanan termal,
tugas jobscheduler
akan di-throttle dan, jika perlu, penonaktifan
termal framework akan dimulai. Aplikasi yang menerima notifikasi stres termal
melalui callback terdaftar di
class PowerManager
dapat menyesuaikan UX-nya dengan baik.
HAL Termal
Android 9 dan yang lebih lama menggunakan antarmuka polling yang ditentukan di Thermal HAL 1.0 untuk mendapatkan pembacaan suhu. HAL ini memungkinkan framework Android dan klien tepercaya lainnya, seperti HAL produsen perangkat, untuk membaca suhu saat ini dan nilai minimum penonaktifan serta throttling khusus kebijakan produk untuk setiap sensor melalui API yang sama.
Android 10 memperkenalkan sistem termal dalam framework Android dan versi HAL baru, Thermal HAL 2.0, yang memisahkan antarmuka ke perangkat hardware subsistem termal. Antarmuka hardware mencakup sensor suhu dan termistor untuk kulit, baterai, GPU, CPU, dan port USB. Suhu kulit perangkat adalah sistem terpenting yang harus dilacak untuk menjaga suhu permukaan perangkat dalam batas termal yang ditentukan.
Selain itu, Thermal HAL 2.0 menyediakan pembacaan sensor termal
dan tingkat keparahan terkait kepada beberapa klien untuk menunjukkan stres termal. Gambar
berikut menunjukkan dua pesan peringatan dari UI
Sistem Android. Pesan ini ditampilkan saat antarmuka callback IThermalEventListener
untuk sensor USB_PORT
dan SKIN
masing-masing mencapai tingkat keparahan THERMAL_STATUS_EMERGENCY
.
Gambar 1. Peringatan panas berlebih.
Suhu saat ini diambil untuk berbagai
jenis sensor termal melalui
IThermal HAL. Setiap panggilan fungsi
menampilkan nilai status SUCCESS
atau FAILURE
. Jika SUCCESS
ditampilkan, proses akan dilanjutkan. Jika FAILURE
ditampilkan, pesan error, yang harus dapat dibaca manusia, akan dikirim ke status.debugMessage
.
Selain sebagai antarmuka polling yang menampilkan suhu saat ini,
Anda dapat menggunakan callback
IThermalChangedCallback
(HIDL, Android 10 hingga 13) atau
IThermalChangedCallback
(AIDL, Android 14 dan yang lebih baru)
dengan antarmuka callback dari klien HAL termal, seperti layanan
termal framework. Misalnya, RegisterIThermalChangedCallback
dan
UnregisterIThermalChangedCallback
untuk mendaftarkan atau membatalkan pendaftaran peristiwa
yang berubah tingkat keparahannya. Jika tingkat keparahan termal sensor tertentu telah berubah,
notifyThrottling
akan mengirimkan callback peristiwa throttling termal ke pemroses peristiwa
termal.
Selain informasi sensor termal, daftar perangkat pendingin yang dimitigasi
ditampilkan di getCurrentCoolingDevices
. Urutan daftar ini bersifat persisten, meskipun
perangkat pendingin telah offline. Produsen perangkat dapat menggunakan daftar untuk
mengumpulkan metrik statsd
.
Untuk informasi selengkapnya, lihat Implementasi referensi.
Meskipun Anda dapat menambahkan ekstensi sendiri, Anda tidak boleh menonaktifkan fungsi mitigasi termal.
Layanan termal
Di Android 10 dan yang lebih tinggi, layanan termal dalam framework memberikan pemantauan
konstanta menggunakan berbagai sinyal mitigasi dari Thermal HAL 2.0, dan memberikan
masukan tingkat throttling kepada kliennya. Klien ini mencakup komponen internal
dan aplikasi Android. Layanan ini menggunakan dua antarmuka callback binder,
IThermalEventListener
dan IThermalStatusListener
, yang ditampilkan sebagai callback. Yang
pertama adalah untuk penggunaan platform internal dan produsen perangkat, dan yang kedua
adalah untuk aplikasi Android.
Melalui antarmuka callback, status termal perangkat saat ini
dapat diambil sebagai nilai bilangan bulat yang berkisar dari 0x00000000
(tanpa throttling) hingga
0x00000006
(penonaktifan perangkat). Hanya layanan sistem tepercaya, seperti
Android API atau API produsen perangkat, yang dapat mengakses sensor termal
dan informasi peristiwa termal yang mendetail. Gambar berikut memberikan model
alur proses mitigasi termal di Android 10 dan yang lebih baru:
Gambar 2. Alur proses mitigasi termal di Android 10 dan yang lebih tinggi.
Panduan produsen perangkat
Untuk melaporkan sensor suhu perangkat dan status throttling untuk Android 10 hingga
13, produsen perangkat harus menerapkan aspek HIDL dari Thermal
HAL 2.0 (IThermal.hal
).
Untuk melaporkan status throttling dan sensor suhu perangkat untuk Android
14, produsen perangkat harus mengimplementasikan aspek AIDL
dari Thermal HAL 2.0 (IThermal.aidl
).
Apa pun yang membatasi performa perangkat, termasuk batasan daya baterai, harus dilaporkan melalui HAL termal. Untuk memastikan hal ini terjadi, masukkan semua sensor yang mungkin menunjukkan perlunya mitigasi (berdasarkan perubahan status) ke dalam HAL termal, dan laporkan tingkat keparahan tindakan mitigasi yang dilakukan. Nilai suhu yang ditampilkan dari pembacaan sensor tidak harus berupa suhu sebenarnya, selama nilai tersebut secara akurat mencerminkan batas tingkat keparahan yang sesuai. Misalnya, Anda dapat meneruskan nilai numerik yang berbeda, bukan nilai nilai minimum suhu yang sebenarnya, atau Anda dapat membuat guardbanding ke dalam spesifikasi nilai minimum untuk memberikan histeresis. Namun, keparahan yang sesuai dengan nilai tersebut harus cocok dengan yang diperlukan pada nilai minimum tersebut. Misalnya, Anda dapat memutuskan untuk menampilkan 72°C sebagai batas suhu kritis, jika suhu sebenarnya adalah 65°C, dan sesuai dengan tingkat keparahan kritis yang Anda tentukan. Tingkat keparahan harus akurat untuk fungsi framework termal terbaik.
Untuk membaca selengkapnya tentang tingkat nilai minimum dalam framework dan cara nilai minimum tersebut sesuai dengan tindakan mitigasi, lihat Menggunakan kode status termal.
Menggunakan API termal
Aplikasi dapat menambahkan dan menghapus pemroses, serta mengakses informasi status termal
melalui
class PowerManager
.
Antarmuka IThermal
menyediakan semua fungsi yang diperlukan, termasuk
menampilkan nilai status termal. Antarmuka binder IThermal digabungkan sebagai antarmuka OnThermalStatusChangedListener
, yang dapat digunakan aplikasi saat mendaftarkan atau menghapus pemroses status termal.
API termal Android memiliki metode callback dan polling untuk aplikasi agar
aplikasi diberi tahu tentang tingkat keparahan termal melalui kode status, yang ditentukan
dalam class PowerManager
. Metode tersebut adalah:
getCurrentThermalStatus()
menampilkan status termal perangkat saat ini sebagai bilangan bulat, kecuali jika perangkat mengalami throttling.addThermalStatusListener()
menambahkan pemroses.removeThermalStatusListener()
menghapus pemroses yang ditambahkan sebelumnya.
Menggunakan kode status termal
Kode status termal diterjemahkan ke tingkat throttling tertentu, yang dapat Anda
gunakan untuk mengumpulkan data dan mendesain UX yang optimal. Misalnya, aplikasi mungkin
menerima status 0x00000000
(THERMAL_STATUS_NONE
), yang nantinya
akan berubah menjadi 0x00000001
(THERMAL_STATUS_LIGHT
). Dengan menandai status 0x00000000
sebagai t0, lalu mengukur waktu yang berlalu dari status THERMAL_STATUS_NONE
ke
status THERMAL_STATUS_LIGHT
sebagai t1, produsen perangkat dapat mendesain dan
menguji strategi mitigasi untuk kasus penggunaan tertentu. Tabel berikut menguraikan
cara yang disarankan untuk menggunakan kode status termal:
Kode status termal | Deskripsi dan penggunaan yang disarankan |
---|---|
THERMAL_STATUS_NONE (0x00000000 ) |
Tanpa throttling. Gunakan status ini untuk menerapkan tindakan perlindungan, seperti mendeteksi awal jangka waktu (t0 hingga t1) dari THERMAL_STATUS_NONE (0 ) hingga THERMAL_STATUS_LIGHT (1 ). |
THERMAL_STATUS_LIGHT (0x00000001 ) |
Throttling ringan, UX tidak terpengaruh. Gunakan mitigasi perangkat yang lembut untuk tahap ini. Misalnya, lewati peningkatan atau gunakan frekuensi yang tidak efisien, tetapi hanya pada inti yang besar. |
THERMAL_STATUS_MODERATE (0x00000002 ) |
Throttling sedang, UX tidak terlalu terpengaruh. Mitigasi termal memengaruhi aktivitas latar depan, sehingga aplikasi harus segera mengurangi daya. |
THERMAL_STATUS_SEVERE (0x00000003 ) |
Throttling yang parah; UX sangat terpengaruh. Pada tahap ini, mitigasi termal perangkat harus membatasi kapasitas sistem. Status ini dapat menyebabkan efek samping, seperti jank tampilan dan jitter audio. |
THERMAL_STATUS_CRITICAL (0x00000004 ) |
Platform telah melakukan segala hal untuk mengurangi daya. Software mitigasi termal perangkat telah menempatkan semua komponen untuk berjalan pada kapasitas terendah. |
THERMAL_STATUS_EMERGENCY (0x00000005 ) |
Komponen utama di platform dinonaktifkan karena kondisi termal dan fungsi perangkat dibatasi. Kode status ini menunjukkan peringatan terakhir sebelum perangkat dimatikan. Dalam situasi ini, beberapa fungsi, seperti modem dan data seluler, dinonaktifkan sepenuhnya. |
THERMAL_STATUS_SHUTDOWN (0x00000006 ) |
Matikan segera. Karena tingkat keparahan tahap ini, aplikasi mungkin tidak dapat menerima notifikasi ini. |
Produsen perangkat harus lulus pengujian VTS untuk HAL termal, dan dapat menggunakan
emul_temp
dari
antarmuka
sysfs kernel untuk menyimulasikan perubahan suhu.