Łagodzenie temperatur

Dzięki platformie Androida producenci urządzeń i deweloperzy aplikacji mogą wykorzystywać dane termiczne, aby zapewnić spójne wrażenia użytkownika, gdy urządzenie zacznie się przegrzewać. Na przykład, gdy system jest poddawany obciążeniu termicznemu, zadania jobscheduler są ograniczane, a w razie potrzeby inicjowane jest wyłączenie termiczne frameworka. Aplikacje, które otrzymują powiadomienia o obciążeniu termicznym za pomocą zarejestrowanego wywołania zwrotnego w klasie PowerManager, mogą płynnie dostosowywać interfejs użytkownika.

Termostat HAL

Android 9 i starsze wersje korzystają z interfejsu odpytywania zdefiniowanego w aplikacji Thermal HAL 1.0, aby uzyskiwać odczyty temperatury. Ta lista HAL umożliwiła platformie Androida i innym zaufanym klientom, takim jak lista HAL producenta urządzenia, za pomocą tego samego interfejsu API odczytywanie bieżących wartości progowych ograniczania i wyłączania specyficznych dla temperatury i zasad usługi.

W Androidzie 10 wprowadzono system termiczny na platformie Androida i nową wersję HAL, Thermal HAL 2.0, która wyodrębnia interfejs do urządzeń podsystemu termalnego. Interfejs sprzętowy obejmuje czujniki temperatury i termistory do skóry, baterii, układu GPU, procesora i portu USB. Temperatura skóry urządzenia jest najważniejszym systemem, który należy monitorować, aby utrzymać temperaturę powierzchni urządzenia w określonych granicach.

Dodatkowo interfejs Thermal HAL 2.0 udostępnia wielu klientom odczyty czujnika temperatury i powiązane z nimi poziomy intensywności, aby wskazać na obciążenie termiczne. Na rysunku poniżej widać 2 ostrzeżenia z interfejsu użytkownika systemu Android. Te komunikaty są wyświetlane, gdy interfejs wywołania zwrotnego IThermalEventListener dla czujników USB_PORT i SKIN osiągnie poziom ważności THERMAL_STATUS_EMERGENCY.

ostrzeżenia o przegrzaniu,

Rysunek 1. ostrzeżenia o przegrzewaniu,

Bieżące temperatury są pobierane dla różnych typów czujników termicznych za pomocą IThermal HAL. Każde wywołanie funkcji zwraca wartość stanu SUCCESS lub FAILURE. Jeśli zwrócona zostanie wartość SUCCESS, proces będzie kontynuowany. Jeśli zostanie zwrócona wartość FAILURE, na adres status.debugMessage zostanie wysłany komunikat o błędzie, który musi być czytelny dla człowieka.

.

Oprócz interfejsu ankiety, który zwraca bieżące temperatury, możesz użyć wywołania zwrotnego IThermalChangedCallback (HIDL, Android 10–13) lub IThermalChangedCallback (AIDL, Android 14 i nowsze) z interfejsem wywołania zwrotnego z klientów HAL termicznego, takiego jak usługa termiczna w ramach frameworku. Na przykład RegisterIThermalChangedCallbackUnregisterIThermalChangedCallback, aby rejestrować lub anulować rejestrowanie zdarzeń ze zmienionym poziomem ważności. Jeśli stopień zagrożenia związany z temperaturą danego czujnika uległ zmianie, notifyThrottling wysyła do detektorów zdarzeń związanych z temperaturą wywołanie zwrotne zdarzenia związanego z ograniczeniem poboru mocy.

Oprócz informacji o czujnikach termicznych przedstawiona jest lista urządzeń chłodzących w tym zakresie: getCurrentCoolingDevices. Kolejność na tej liście jest trwała, nawet jeśli urządzenie chłodzące jest offline. Producenci urządzeń mogą używać tej listy do zbierania danych statsd.

Więcej informacji znajdziesz w dokumentacji referencyjnej.

Możesz dodawać własne rozszerzenia, ale nie wyłączaj funkcji łagodzenia termicznego.

Usługa termiczna

W Androidzie 10 i nowszych usługa termiczna w ramach platformy zapewnia stałe monitorowanie za pomocą różnych sygnałów łagodzących pochodzących z Thermal HAL 2.0 i przekazuje klientom informacje o wadze ograniczenia. Do tych klientów należą wewnętrzne komponenty i aplikacje na Androida. Usługa korzysta z 2 interfejsów wywołań zwrotnych bindera: IThermalEventListenerIThermalStatusListener, które są udostępniane jako wywołania zwrotne. Pierwszy jest przeznaczony do użytku wewnętrznego przez producentów platform i urządzeń, a drugi do tworzenia aplikacji na Androida.

Za pomocą interfejsów wywołania zwrotnego można pobrać bieżący stan termiczny urządzenia jako wartość całkowitą z zakresu od 0x00000000 (brak ograniczeń) do 0x00000006 (wyłączenie urządzenia). Do szczegółowych informacji o czujniku temperatury i zdarzeniach związanych z temperaturą ma dostęp tylko zaufana usługa systemowa, np. interfejs API Androida lub interfejs API producenta urządzenia. Na rysunku poniżej przedstawiono model przepływu procesu łagodzenia termicznego w Androidzie 10 i nowszych:

Proces zapobiegania przegrzaniu w Androidzie 10 i nowszych

Rysunek 2. Proces zapobiegania przegrzaniu w Androidzie 10 i nowszych

Wytyczne producenta urządzenia

Aby zgłaszać stan czujnika temperatury i ograniczania urządzenia w Androidzie 10–13, producenci urządzeń muszą zaimplementować aspekt HIDL interfejsu ThermalHAL 2.0 (IThermal.hal).

Aby zgłaszać stan czujnika temperatury urządzenia i ograniczania w Androidzie 14, producenci urządzeń muszą zaimplementować interfejs AIDL interfejsu Thermal HAL 2.0 (IThermal.aidl).

Wszystko, co ogranicza wydajność urządzenia, w tym ograniczenia dotyczące zasilania z baterii, należy zgłaszać w raportach z termostatem HAL. Aby to osiągnąć, dodaj do interfejsu HAL dotyczącego temperatury wszystkie czujniki, które mogą wskazywać na potrzebę zastosowania środków zaradczych (na podstawie zmian stanu), i zgłoś wagę podjętych działań. Wartość temperatury zwrócona z odczytu z czujnika nie musi być rzeczywistą temperaturą, o ile dokładnie odzwierciedla odpowiedni próg ważności. Zamiast rzeczywistych wartości progowych temperatury możesz na przykład przekazać różne wartości liczbowe lub wprowadzić ograniczenie progowe, aby zapewnić histerezę. Jednak wagę odpowiadającą tej wartości musi odpowiadać wymaganej wartości progowej. Możesz na przykład zwrócić 72 °C jako krytyczny próg temperatury, gdy rzeczywista temperatura wynosi 65 °C i odpowiada określonej przez Ciebie krytycznej wadze. Aby zapewnić najlepszą funkcjonalność ramki termicznej, należy podać dokładny poziom ważności.

Więcej informacji o poziomach progowych w ramach i o tym, jak są one powiązane z działaniami zapobiegawczymi, znajdziesz w artykule Używanie kodów stanu temperatury.

Korzystanie z interfejsów API dotyczących temperatury

Aplikacje mogą dodawać i usuwać słuchaczy oraz uzyskiwać informacje o stanie termicznym za pomocą klasy PowerManager. Interfejs IThermal zapewnia wszystkie niezbędne funkcje, w tym zwracanie wartości stanu termicznego. Interfejs bindera Thermal jest opakowany jako interfejs OnThermalStatusChangedListener, którego aplikacje mogą używać podczas rejestrowania lub usuwania detektorów stanu termicznego.

Interfejsy API dotyczące temperatury w urządzeniach z Androidem zawierają zarówno metody wywołania zwrotnego, jak i metody sondowania, aby aplikacje mogły otrzymywać powiadomienia o poważnych poziomach temperatury za pomocą kodów stanu zdefiniowanych w klasie PowerManager. Dostępne metody:

Używanie kodów stanu termicznego

Kody stanu temperatury odpowiadają określonym poziomom ograniczania, które możesz wykorzystywać do zbierania danych i projektowania optymalnego UX. Aplikacje mogą na przykład mieć stan 0x00000000 (THERMAL_STATUS_NONE), który może się później zmienić na 0x00000001 (THERMAL_STATUS_LIGHT). W takim przypadku można oznaczyć stan 0x00000000 jako t0, a następnie zmierzyć czas, który upłynął od stanu THERMAL_STATUS_NONE do stanu THERMAL_STATUS_LIGHT, jako t1. Dzięki temu producenci urządzeń mogą zaprojektować i przetestować strategie łagodzenia skutków użycia w określonych przypadkach użycia. W poniższej tabeli znajdziesz zalecane sposoby korzystania z kodów stanu urządzenia termicznego:

Kod stanu termicznego Opis i sugerowane użycie
THERMAL_STATUS_NONE (0x00000000) Bez ograniczania. Użyj tego stanu, aby wdrożyć działania ochronne, takie jak wykrywanie początku okresu (t0 do t1) od THERMAL_STATUS_NONE (0) do THERMAL_STATUS_LIGHT (1).
THERMAL_STATUS_LIGHT (0x00000001) Niewielkie ograniczenie i nie wpływa na wygodę użytkowników. Na tym etapie zastosuj łagodne środki zapobiegające. Na przykład pomiń zwiększanie lub używanie niewydajnych częstotliwości, ale tylko w przypadku dużych rdzeni.
THERMAL_STATUS_MODERATE (0x00000002) Umiarkowane ograniczenie, nie ma większego wpływu na UX. Łagodzenie temperatury wpływa na działania na pierwszym planie, dlatego aplikacje powinny natychmiast zmniejszyć zużycie energii.
THERMAL_STATUS_SEVERE (0x00000003) Znaczne ograniczenie, które w dużym stopniu wpływa na wygodę użytkowników. Na tym etapie system powinien ograniczyć wydajność urządzenia, aby ograniczyć jego nagrzewanie się. Może to powodować efekty uboczne, takie jak zacinanie się wyświetlacza i zakłócenia dźwięku.
THERMAL_STATUS_CRITICAL (0x00000004) Platforma zrobiła wszystko, aby ograniczyć zużycie energii. Oprogramowanie do ograniczania temperatury urządzenia zamontowało wszystkie komponenty w taki sposób, aby działały z najmniejszą wydajnością.
THERMAL_STATUS_EMERGENCY (0x00000005) Kluczowe komponenty platformy są wyłączane z powodu warunków termicznych, a funkcjonalność urządzenia jest ograniczona. Ten kod stanu to ostatnie ostrzeżenie przed wyłączeniem urządzenia. W tym stanie niektóre funkcje, takie jak modem i dane komórkowe, są całkowicie wyłączone.
THERMAL_STATUS_SHUTDOWN (0x00000006) Natychmiast wyłącz. Ze względu na poważny charakter tego etapu aplikacje mogą nie otrzymywać tego powiadomienia.

Producenci urządzeń muszą przejść test VTS dotyczący termostatu HAL i mogą używać interfejsu emul_temp z interfejsu sysfs jądra do symulowania zmian temperatury.