Aby zapewnić okresy bezczynności pojazdów, tryb garażowy utrzymuje system w stanie czuwania, dzięki czemu można wykonywać zadania w JobScheduler
ograniczone przez bezczynność .
Co to jest tryb garażowy?
Użytkownicy podłączonych urządzeń, takich jak telefony, polegają na systemie, który zapewnia stabilność, aktualność i optymalizację urządzeń. Aby osiągnąć ten stan, platforma Android zapewnia okno bezczynności , podczas którego aplikacje mogą wykonywać zadania, gdy użytkownik nie wchodzi w interakcję z urządzeniem. Telefon uznaje się za nieaktywny , jeśli użytkownik nie dotyka go przez dłuższy czas (60 minut lub dłużej), a ekran jest wyłączony. W przeciwieństwie do telefonu, gdy samochód nie jest używany, jest on wyłączony, co oznacza, że nie ma okna czasowego bezczynności . Tryb garażowy zapewnia bezczynność w samochodzie.
Po wyłączeniu samochodu przez użytkownika system przechodzi w tryb garażowy. Gdy samochód znajduje się w trybie garażowym, system jest włączony, wyświetlacz jest wyłączony i wykonywane są bezczynne zadania w kolejce JobScheduler
. Aby wdrożyć tryb garażowy, zobacz Wskazówki dotyczące wdrażania urządzenia .
Wytyczne dotyczące wdrażania urządzeń
Aby aktywować tryb garażowy, podczas wyłączania pojazdu, HAL pojazdu (VHAL) musi wysłać AP_POWER_STATE_REQ
ze stanem SHUTDOWN_PREPARE
z parametrem ustawionym na SHUTDOWN_ONLY
lub CAN_SLEEP
.
Aby stan SHUTDOWN_PREPARE
był skuteczny, VHAL musi określić dwa parametry (stan i parametr dodatkowy) dla komendy AP_POWER_STATE_REQ
. Dzięki temu urządzenie może wejść w tryb garażowy, który wykrywa zaplanowane zadania w JobScheduler
i zapobiega zawieszaniu lub zamykaniu systemu do czasu zakończenia zadań.
W jaki sposób implementacje urządzeń łączą się ze strukturą Androida?
W przypadku trybu garażowego struktura żąda od VHAL przedłużenia czasu zamknięcia do momentu przekroczenia wymaganego czasu trwania lub wykonania wszystkich zadań, kiedy to system się wyłącza. W określonych okolicznościach określonych w dyrektywie CDD implementacje urządzeń mogą spowodować wcześniejsze zamknięcie systemu. Szczegółowe informacje na temat wymagań dotyczących zgodności z systemem Android można znaleźć w dokumencie definicji zgodności systemu Android (CDD) .
Jeśli VHAL musi zamknąć system przed zakończeniem trybu garażowego, VHAL może wydać SHUTDOWN_PREPARE
z parametrem ustawionym na SHUTDOWN_IMMEDIATELY
lub SLEEP_IMMEDIATELY
. Implementacje urządzeń mogą z tego korzystać tylko w określonych okolicznościach, zazwyczaj gdy zasoby potrzebne do utrzymania działania systemu są niedostępne. Na przykład, gdy pojemność baterii jest niewystarczająca.
Rysunek 1. Przebieg trybu garażowego
Jak twórcy aplikacji współpracują z trybem garażowym?
Aplikacje i usługi nie współdziałają bezpośrednio z trybem garażowym. Zamiast tego aplikacje planują zadania w JobScheduler
. Zadania ograniczone przez bezczynność są wykonywane w trybie garażowym.
Poniższy kod pokazuje, jak zaplanować uruchomienie zadania w trybie garażowym:
public class MyGarageModeJob extends JobService { ... } Context context = ...; int jobId = ...; ComponentName myGarageModeJobName = new componentName(context, MyGarageModeJob.class); JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName) .setRequiresDeviceIdle(true); // Example of an optional constraint: infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED); JobScheduler jobScheduler = (JobScheduler) context .getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(infoBuilder.build());
Debuguj tryb garażowy
Aby debugować tryb garażowy:- Aby włączyć kategorie rejestrowania odpowiednie dla trybu garażowego:
adb shell stop adb shell setprop log.tag.GarageMode VERBOSE adb shell setprop log.tag.Finsky VERBOSE adb shell setprop log.tag.CAR.POWER VERBOSE adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE adb shell start
- Aby przejrzeć dane wyjściowe logcat i wskazać, że rozpoczyna się tryb garażowy:
GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
- Aby określić, czy dane wyjściowe logcat wskazują, że tryb garażowy został zakończony (anulowany lub zakończony):
[GarageMode]: GarageMode was canceled
lub[GarageMode]: GarageMode completed normally
Tryb garażowy zależy od stanu zasilania pojazdu, jak opisano powyżej.
- Przejrzyj dane wyjściowe logcat, aby wskazać, że wprowadzono prawidłowe stany zasilania:
CAR.POWER: starting shutdown prepare without Garage Mode GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode CAR.POWER: send shutdown prepare CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0