Dzięki platformie Android producenci urządzeń i twórcy aplikacji mogą wykorzystywać dane termiczne, aby zapewnić spójne wrażenia użytkownika (UX), jeśli urządzenie zacznie się przegrzewać. Na przykład, gdy system ulega obciążeniu termicznemu, zadania jobscheduler
zadań zostają ograniczone i, jeśli to konieczne, inicjowane jest ramowe wyłączenie termiczne. Aplikacje, które otrzymują powiadomienia o stresie termicznym poprzez zarejestrowane wywołanie zwrotne w klasie PowerManager
, mogą z łatwością dostosować swój UX.
Termiczny HAL
Android 9 i starsze wersje korzystają z interfejsu odpytywania zdefiniowanego w Thermal HAL 1.0 w celu uzyskania odczytów temperatury. Ta warstwa HAL umożliwiła platformie Android i innym zaufanym klientom, takim jak HAL producenta urządzenia, odczytanie bieżącej temperatury i progów dławienia i wyłączania specyficznych dla produktu dla każdego czujnika za pośrednictwem tego samego interfejsu API.
W Androidzie 10 wprowadzono system termiczny w ramach Androida oraz nową wersję HAL, Thermal HAL 2.0, która streszcza interfejs do urządzeń sprzętowych podsystemu termicznego. Interfejs sprzętowy obejmuje czujniki temperatury i termistory skóry, baterii, procesora graficznego, procesora i portu USB. Temperatura skóry urządzenia to najważniejszy system monitorowania, pozwalający utrzymać temperaturę powierzchni urządzenia w określonych granicach termicznych.
Dodatkowo Thermal HAL 2.0 zapewnia wielu klientom odczyty czujników termicznych i powiązane poziomy istotności w celu wskazania stresu termicznego. Poniższy rysunek przedstawia dwa komunikaty ostrzegawcze z interfejsu użytkownika systemu Android. Komunikaty te są wyświetlane, gdy interfejs wywołania zwrotnego IThermalEventListener
odpowiednio dla czujników USB_PORT
i SKIN
osiągnie poziom istotności THERMAL_STATUS_EMERGENCY
.
Rysunek 1. Ostrzeżenia o przegrzaniu.
Aktualne temperatury są pobierane dla różnych typów czujników termicznych poprzez Ithermal HAL . Każde wywołanie funkcji zwraca wartość statusu SUCCESS
lub FAILURE
. Jeśli zostanie zwrócony SUCCESS
, proces będzie kontynuowany. Jeśli zostanie zwrócony FAILURE
, do status.debugMessage
zostanie wysłany komunikat o błędzie, który musi być czytelny dla człowieka.
Oprócz tego, że jest interfejsem odpytywania, który zwraca bieżące temperatury, możesz używać wywołania zwrotnego IThermalChangedCallback
(HIDL, Android 10 do 13) lub IThermalChangedCallback
(AIDL, Android 14 i nowsze) z interfejsem wywołania zwrotnego z termicznych klientów HAL, takich jak framework obsługa cieplna. Na przykład RegisterIThermalChangedCallback
i UnregisterIThermalChangedCallback
, aby zarejestrować lub wyrejestrować zdarzenia o zmienionej ważności. Jeśli intensywność termiczna danego czujnika uległa zmianie, notifyThrottling
wysyła wywołanie zwrotne zdarzenia dławienia termicznego do detektorów zdarzeń termicznych.
Oprócz informacji z czujników termicznych w getCurrentCoolingDevices
wyświetlana jest lista urządzeń chłodzących z ograniczeniem. Kolejność na tej liście jest niezmienna, nawet jeśli urządzenie chłodzące przeszło w tryb offline. Producenci urządzeń mogą używać tej listy do gromadzenia danych statsd
.
Aby uzyskać więcej informacji, zobacz Implementacja referencyjna .
Chociaż możesz dodawać własne rozszerzenia, nie powinieneś wyłączać funkcji łagodzenia termicznego.
Obsługa cieplna
W Androidzie 10 i nowszych usługa termiczna w ramach zapewnia stałe monitorowanie przy użyciu różnych sygnałów łagodzących z Thermal HAL 2.0 i przekazuje swoim klientom informacje o ważności dławienia. Klienci ci obejmują komponenty wewnętrzne i aplikacje na Androida. Usługa korzysta z dwóch interfejsów wywołań zwrotnych spoiwa, IThermalEventListener
i IThermalStatusListener
, udostępnianych jako wywołania zwrotne. Pierwsza przeznaczona jest do użytku wewnętrznego przez producenta platformy i urządzenia, druga zaś do aplikacji na Androida.
Za pośrednictwem interfejsów wywołań zwrotnych bieżący stan termiczny urządzenia można pobrać jako wartość całkowitą z zakresu od 0x00000000
(brak ograniczania przepustowości) do 0x00000006
(wyłączenie urządzenia). Tylko zaufana usługa systemowa, taka jak interfejs API systemu Android lub interfejs API producenta urządzenia, może uzyskać dostęp do szczegółowych informacji o czujniku termicznym i zdarzeniach termicznych. Poniższy rysunek przedstawia model przebiegu procesu łagodzenia termicznego w systemie Android 10 i nowszych wersjach:
Rysunek 2. Przebieg procesu łagodzenia termicznego w systemie Android 10 i nowszych wersjach.
Wytyczne producenta urządzenia
Aby zgłosić czujnik temperatury urządzenia i stan dławienia w przypadku Androida 10–13, producenci urządzeń muszą wdrożyć aspekt HIDL Thermal HAL 2.0 ( IThermal.hal
).
Aby zgłosić czujnik temperatury urządzenia i stan dławienia dla Androida 14, producenci urządzeń muszą wdrożyć aspekt AIDL Thermal HAL 2.0 ( IThermal.aidl
).
Wszystko, co ogranicza wydajność urządzenia, w tym ograniczenia mocy baterii, należy zgłaszać za pomocą termicznej warstwy HAL. Aby mieć pewność, że tak się stanie, umieść wszystkie czujniki, które mogą wskazywać potrzebę łagodzenia skutków (w oparciu o zmiany stanu) w termicznej warstwie HAL i zgłaszaj wagę wszelkich podjętych działań łagodzących. Wartość temperatury zwrócona z odczytu czujnika nie musi być rzeczywistą temperaturą, o ile dokładnie odzwierciedla odpowiedni próg dotkliwości. Na przykład można przekazać różne wartości liczbowe zamiast rzeczywistych wartości progowych temperatury lub można zbudować pasmo ochronne w specyfikacjach progowych, aby zapewnić histerezę. Jednak ważność odpowiadająca tej wartości musi odpowiadać potrzebom przy tym progu. Na przykład możesz zdecydować o przywróceniu 72°C jako progu temperatury krytycznej, gdy rzeczywista temperatura wynosi 65°C i odpowiada określonej wartości krytycznej. Poziom ważności musi być dokładny, aby zapewnić najlepszą funkcjonalność struktury termicznej.
Aby dowiedzieć się więcej na temat poziomów progów w środowisku i tego, jak odpowiadają one działaniom łagodzącym, zobacz temat Korzystanie z kodów stanu termicznego .
Użyj termicznych API
Aplikacje mogą dodawać i usuwać odbiorniki oraz uzyskiwać dostęp do informacji o stanie termicznym za pośrednictwem klasy PowerManager
. Interfejs IThermal
zapewnia całą potrzebną funkcjonalność, w tym zwracanie wartości stanu termicznego. Interfejs powiązania IThermal jest opakowany jako interfejs OnThermalStatusChangedListener
, którego aplikacje mogą używać podczas rejestrowania lub usuwania odbiorników stanu termicznego.
Termiczne interfejsy API systemu Android oferują zarówno metody wywołania zwrotnego, jak i odpytywania, dzięki którym aplikacje mogą być powiadamiane o poziomach ważności termicznej za pomocą kodów stanu zdefiniowanych w klasie PowerManager
. Metody to:
-
getCurrentThermalStatus()
zwraca bieżący stan termiczny urządzenia jako liczbę całkowitą, chyba że urządzenie jest w trakcie ograniczania przepustowości. -
addThermalStatusListener()
dodaje słuchacza. -
removeThermalStatusListener()
usuwa wcześniej dodany słuchacz.
Użyj kodów stanu termicznego
Kody stanu termicznego przekładają się na określone poziomy dławienia, które można wykorzystać do gromadzenia danych i projektowania optymalnego UX. Na przykład aplikacje mogą otrzymać status 0x00000000
( THERMAL_STATUS_NONE
), który później może zmienić się na 0x00000001
( THERMAL_STATUS_LIGHT
). Oznaczenie stanu 0x00000000
jako t0, a następnie zmierzenie czasu, jaki upłynął od stanu THERMAL_STATUS_NONE
do stanu THERMAL_STATUS_LIGHT
jako t1, umożliwia producentom urządzeń projektowanie i testowanie strategii łagodzenia skutków dla konkretnych przypadków użycia. Poniższa tabela przedstawia sugerowane sposoby wykorzystania kodów stanu termicznego:
Kod stanu termicznego | Opis i sugerowane zastosowanie |
---|---|
THERMAL_STATUS_NONE ( 0x00000000 ) | Żadnego dławienia. Użyj tego stanu, aby wdrożyć działania zabezpieczające, takie jak wykrycie początku okresu czasu (t0 do t1) od THERMAL_STATUS_NONE ( 0 ) do THERMAL_STATUS_LIGHT ( 1 ). |
THERMAL_STATUS_LIGHT ( 0x00000001 ) | Ograniczanie światła, nie ma to wpływu na UX. Na tym etapie użyj delikatnego łagodzenia urządzenia. Na przykład pomiń zwiększanie mocy lub używanie nieefektywnych częstotliwości, ale tylko na dużych rdzeniach. |
THERMAL_STATUS_MODERATE ( 0x00000002 ) | Umiarkowane ograniczanie, UX nie ma większego wpływu. Łagodzenie temperatury wpływa na działania na pierwszym planie, dlatego aplikacje powinny natychmiast zmniejszyć zużycie energii. |
THERMAL_STATUS_SEVERE ( 0x00000003 ) | Poważne dławienie; Duży wpływ ma to na UX. Na tym etapie łagodzenie termiczne urządzenia powinno ograniczyć wydajność systemu. Ten stan może powodować skutki uboczne, takie jak zacinanie się obrazu i drgania dźwięku. |
THERMAL_STATUS_CRITICAL ( 0x00000004 ) | Platforma zrobiła wszystko, aby zmniejszyć moc. Oprogramowanie urządzenia do łagodzenia efektu termicznego ustawiło wszystkie komponenty na pracę z najniższą wydajnością. |
THERMAL_STATUS_EMERGENCY ( 0x00000005 ) | Kluczowe komponenty platformy wyłączają się ze względu na warunki termiczne, a funkcjonalność urządzenia jest ograniczona. Ten kod stanu reprezentuje ostatnie ostrzeżenie przed wyłączeniem urządzenia. W tym stanie niektóre funkcje, takie jak modem i transmisja danych komórkowych, są całkowicie wyłączone. |
THERMAL_STATUS_SHUTDOWN ( 0x00000006 ) | Natychmiast się wyłącz. Ze względu na wagę tego etapu aplikacje mogą nie otrzymać tego powiadomienia. |
Producenci urządzeń muszą przejść test VTS pod kątem termicznej warstwy HAL i mogą używać emul_temp
z interfejsu sysfs jądra do symulacji zmian temperatury.