Zapobieganie przegrzewaniu się

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

Interfejs HAL termiczny

Android 9 i starsze wersje korzystają z interfejsu odpytywania zdefiniowanego w Thermal HAL 1.0, aby uzyskiwać odczyty temperatury. Ten HAL umożliwiał platformie Androida i innym zaufanym klientom, takim jak HAL producenta urządzenia, odczytywanie aktualnej temperatury oraz progów ograniczania i wyłączania związanych z zasadami dotyczącymi produktu dla każdego czujnika za pomocą tego samego interfejsu API.

W Androidzie 10 wprowadzono system termiczny w ramach Androida i nową wersję HAL, Thermal HAL 2.0, która abstrahuje interfejs do urządzeń sprzętowych podsystemu termicznego. Interfejs sprzętowy obejmuje czujniki temperatury i termistory skóry, baterii, GPU, CPU i portu USB. Temperatura obudowy urządzenia jest najważniejszym parametrem, który należy śledzić, aby utrzymać temperaturę powierzchni urządzenia w określonych limitach termicznych.

Dodatkowo Thermal HAL 2.0 udostępnia wielu klientom odczyty czujnika temperatury i powiązane z nimi poziomy ważności, aby wskazywać obciążenie termiczne. Na poniższym rysunku przedstawiono 2 ostrzeżenia z interfejsu systemu Android. Te komunikaty są wyświetlane, gdy wywołanie zwrotne IThermalEventListener interfejsu dla czujników USB_PORTSKIN osiągnie poziom ważności THERMAL_STATUS_EMERGENCY.

Ostrzeżenia o przegrzaniu.

Rysunek 1. Ostrzeżenia o przegrzaniu.

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

.

Oprócz tego, że jest to interfejs odpytywania, który zwraca bieżące temperatury, możesz używać wywołania zwrotnego IThermalChangedCallback (HIDL, Android 10–13) lub IThermalChangedCallback (AIDL, Android 14 i nowszy) z interfejsem wywołania zwrotnego od klientów HAL termicznego, np. usługi termicznej frameworka. Na przykład RegisterIThermalChangedCallbackUnregisterIThermalChangedCallback, aby zarejestrować lub wyrejestrować zdarzenia zmiany ważności. Jeśli poziom temperatury danego czujnika uległ zmianie,notifyThrottling wysyła wywołanie zwrotne zdarzenia ograniczenia termicznego do detektorów zdarzeń termicznych.

Oprócz informacji z czujnika termicznego w getCurrentCoolingDevices jest dostępna lista urządzeń chłodzących, które zostały wyłączone. Kolejność na tej liście jest stał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 sekcji Implementacja referencyjna.

Możesz dodać własne rozszerzenia, ale nie wyłączaj funkcji ochrony termicznej.

Serwis termiczny

W Androidzie 10 i nowszych wersjach usługa termiczna w ramach platformy zapewnia stałe monitorowanie za pomocą różnych sygnałów ograniczających z Thermal HAL 2.0 i przekazuje klientom informacje o stopniu ograniczenia. Są to komponenty wewnętrzne i aplikacje na Androida. Usługa korzysta z 2 interfejsów wywołań zwrotnych Binder: IThermalEventListenerIThermalStatusListener, które są udostępniane jako wywołania zwrotne. Pierwszy z nich jest przeznaczony do użytku wewnętrznego na platformach i przez producentów urządzeń, a drugi – dla 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 ograniczenia) do 0x00000006 (wyłączenie urządzenia). Tylko zaufana usługa systemowa, np. interfejs API Androida lub interfejs API producenta urządzenia, może uzyskać dostęp do szczegółowych informacji z czujnika temperatury i o zdarzeniach związanych z temperaturą. Na rysunku poniżej przedstawiono model przepływu procesu ograniczania temperatury w Androidzie 10 i nowszych wersjach:

Proces łagodzenia skutków przegrzewania w Androidzie 10 i nowszym.

Rysunek 2. Proces łagodzenia skutków przegrzewania w Androidzie 10 i nowszym.

Wytyczne producenta urządzenia

Aby zgłaszać dane z czujnika temperatury urządzenia i stan ograniczenia wydajności w przypadku Androida 10–13, producenci urządzeń muszą wdrożyć aspekt HIDL interfejsu Thermal HAL 2.0 (IThermal.hal).

Aby raportować dane z czujnika temperatury urządzenia i stan ograniczenia wydajności w przypadku Androida 14, producenci urządzeń muszą wdrożyć aspekt AIDL interfejsu HAL 2.0 (IThermal.aidl).

Wszystkie czynniki ograniczające wydajność urządzenia, w tym ograniczenia związane z zasilaniem bateryjnym, muszą być zgłaszane za pomocą interfejsu HAL termicznego. Aby to zapewnić, umieść wszystkie czujniki, które mogą wskazywać na potrzebę podjęcia działań łagodzących (na podstawie zmian stanu), w warstwie HAL termicznej i zgłaszaj ważność podjętych działań łagodzących. Wartość temperatury zwracana przez odczyt z czujnika nie musi być rzeczywistą temperaturą, o ile dokładnie odzwierciedla odpowiedni próg ważności. Możesz na przykład przekazywać różne wartości liczbowe zamiast rzeczywistych wartości progowych temperatury lub wbudować w specyfikacje progowe pasmo ochronne, aby zapewnić histerezę. Jednak poziom ważności odpowiadający tej wartości musi być zgodny z poziomem wymaganym przy tym progu. Możesz na przykład zwrócić wartość 72°C jako krytyczny próg temperatury, gdy rzeczywista temperatura wynosi 65°C i odpowiada określonemu przez Ciebie krytycznemu poziomowi ważności. Poziom ważności musi być dokładny, aby zapewnić optymalne działanie struktury termicznej.

Więcej informacji o poziomach progowych w ramach i o tym, jak odpowiadają one działaniom ograniczającym, znajdziesz w artykule Korzystanie z kodów stanu termicznego.

Korzystanie z interfejsów API związanych z temperaturą

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

Interfejsy API termiczne Androida mają metody wywołania zwrotnego i odpytywania, dzięki którym aplikacje mogą otrzymywać powiadomienia o poziomach intensywności termicznej za pomocą kodów stanu zdefiniowanych w klasie PowerManager. Są to:

Używanie kodów stanu termicznego

Kody stanu termicznego odpowiadają określonym poziomom ograniczania, których możesz używać do zbierania danych i projektowania optymalnego UX. Na przykład aplikacje mogą otrzymać stan 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 pomiar czasu, który upłynął od stanu THERMAL_STATUS_NONE do stanu THERMAL_STATUS_LIGHT jako t1, umożliwia producentom urządzeń projektowanie i testowanie strategii ograniczania ryzyka w określonych przypadkach użycia. W tabeli poniżej znajdziesz sugerowane sposoby wykorzystania kodów stanu termicznego:

Kod stanu termicznego Opis i zalecane 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–t1) od THERMAL_STATUS_NONE (0) do THERMAL_STATUS_LIGHT (1).
THERMAL_STATUS_LIGHT (0x00000001) Lekkie ograniczanie, nie ma wpływu na UX. Na tym etapie stosuj łagodne środki zaradcze. Możesz na przykład pominąć zwiększanie wydajności lub używanie nieefektywnych częstotliwości, ale tylko w przypadku dużych rdzeni.
THERMAL_STATUS_MODERATE (0x00000002) Umiarkowane ograniczanie, które nie ma dużego wpływu na wygodę użytkownika. Ograniczenie temperatury ma wpływ na aktywność na pierwszym planie, więc aplikacje powinny natychmiast zmniejszyć zużycie energii.
THERMAL_STATUS_SEVERE (0x00000003) Poważne ograniczanie przepustowości; ma to duży wpływ na UX. Na tym etapie ograniczenie termiczne urządzenia powinno ograniczać wydajność systemu. Ten stan może powodować efekty uboczne, takie jak zacinanie się wyświetlania i drgania dźwięku.
THERMAL_STATUS_CRITICAL (0x00000004) Platforma zrobiła wszystko, aby zmniejszyć zużycie energii. Oprogramowanie do zarządzania temperaturą urządzenia ustawiło wszystkie komponenty na najniższą wydajność.
THERMAL_STATUS_EMERGENCY (0x00000005) Główne komponenty platformy wyłączają się z powodu warunków termicznych, a funkcjonalność urządzenia jest ograniczona. Ten kod stanu oznacza ostatnie ostrzeżenie przed wyłączeniem urządzenia. W tym stanie niektóre funkcje, takie jak modem i komórkowa transmisja danych, są całkowicie wyłączone.
THERMAL_STATUS_SHUTDOWN (0x00000006) Natychmiast wyłącz. Ze względu na powagę tego etapu aplikacje mogą nie otrzymywać tego powiadomienia.

Producenci urządzeń muszą przejść test VTS dla termicznego HAL i mogą używać interfejsu kernel sysfs emul_temp do symulowania zmian temperatury.