Tryb garażowy

Aby zapewnić okresy bezczynności w pojazdach, 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łączany, 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 wdrożyć 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, pojazd HAL (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 . Umożliwia to urządzeniu przejście do trybu garażowego, 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ę 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 na temat wymagań dotyczących zgodności z systemem Android można znaleźć w dokumencie Definicji zgodności z systemem Android (CDD) ) . Jeśli VHAL musi wyłączyć system przed zakończeniem trybu garażowego, VHAL 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.

Tryb garażowy

Jak programiści 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żu.

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:
  1. 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
    
  2. Aby przejrzeć dane wyjściowe logcat, aby wskazać, że rozpoczyna 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
    
  3. 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.

  4. 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