Aby zapewnić okresy bezczynności pojazdów, tryb garażowy utrzymuje system w stanie czuwania, aby można było wykonywać zadania w JobScheduler ograniczone bezczynnością .
Co to jest tryb garażowy?
Na podłączonych urządzeniach, takich jak telefony, użytkownicy polegają na systemie, aby zapewnić, że urządzenia są stabilne, aktualne i zoptymalizowane. Aby osiągnąć ten stan, platforma Android zapewnia okno czasu bezczynności , podczas którego aplikacje mogą wykonywać zadania, gdy użytkownik nie wchodzi w interakcję z urządzeniem. Telefon jest uważany za bezczynny , gdy 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 samochód nie ma okna czasowego bezczynności . Tryb garażowy zapewnia czas bezczynności w samochodzie.
Gdy samochód zostanie wyłączony przez użytkownika, system przechodzi w tryb garażowy. Gdy samochód jest w trybie garażowym, system jest włączony, wyświetlacz jest wyłączony i wykonywane są bezczynne zadania w kolejce JobScheduler. Aby zaimplementować tryb garażu, zapoznaj się z poniższymi wskazówkami dotyczącymi implementacji urządzeń .
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 przejść do trybu garażowego, który wykrywa zaplanowane zadania w JobScheduler i zapobiega zawieszaniu lub wyłączaniu systemu do czasu zakończenia zadań.
W jaki sposób implementacje urządzeń łączą się z platformą Android?
W przypadku trybu garażowego platforma żąda od VHAL przedłużenia czasu wyłączenia do momentu przekroczenia wymaganego czasu lub wykonania wszystkich zadań, po czym system zostanie zamknięty. W określonych okolicznościach określonych w CDD implementacje urządzeń mogą wcześniej zamknąć system. (Szczegółowe informacje o wymaganiach dotyczących zgodności z systemem Android można znaleźć w dokumencie CDD (ang. Android Compatibility Definition Document)) . Jeśli VHAL musi wyłączyć system przed zakończeniem trybu garażowego, może wydać polecenie 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 wtedy, gdy zasoby potrzebne do utrzymania działania systemu są niedostępne. Na przykład, gdy pojemność baterii jest niewystarczająca.
Jak deweloperzy aplikacji pracują w trybie garażowym?
Aplikacje i usługi nie współdziałają bezpośrednio z trybem garażu. Zamiast tego aplikacje planują zadania w JobScheduler . Te zadania, które ogranicza bezczynność , wykonuje się w trybie garażowym.
Poniższy kod pokazuje, jak zaplanować zadanie do uruchomienia w trybie garażu:
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());
Debugowanie trybu garażu
Aby debugować tryb garażu:- Aby włączyć kategorie rejestrowania odpowiednie dla trybu garażu:
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, aby wskazać, że uruchamia się tryb garażu:
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 logcata wskazujące, że tryb garażu 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