Tryb garażowy

Aby zapewnić okresy bezczynności w pojazdach, tryb garażu utrzymuje system aby praca w JobScheduler z ograniczeniem bezczynność może być wykonywana.

Co to jest Tryb garażowy?

Na połączonych urządzeniach, takich jak telefony, użytkownicy polegają na systemie są stabilne, aktualne i zoptymalizowane; Aby osiągnąć ten stan, platforma Android zapewnia bezczynny okno, w którym aplikacje mogą wykonywać zadania, gdy użytkownik nie do interakcji z urządzeniem. Telefon jest uznawany za nieaktywny, gdy użytkownik nie dotyka urządzenia. przez dłuższy czas (co najmniej 60 minut) i ekran jest wyłączony. W przeciwieństwie do telefonu, gdy samochód nie jest używany, jest wyłączony, co oznacza, że samochód nie ma czas bezczynności okno. Tryb garażowy zapewnia czas bezczynności w samochodzie.

Gdy użytkownik wyłączy samochód, system przejdzie w tryb garażu. Chociaż samochód ma tryb garażowy, system jest włączony, wyświetlacz jest wyłączony, nieaktywne zadania w kolejce JobScheduler są wykonywane. Aby dowiedzieć się, jak włączyć tryb garażowy, przeczytaj artykuł Wskazówki na temat implementacji urządzeń

Wytyczne dotyczące implementacji na urządzeniach

Aby włączyć tryb garażowy, po wyłączeniu pojazdu komunikat HAL (VHAL) pojazdu musi wysłać AP_POWER_STATE_REQ ze stanem SHUTDOWN_PREPARE z parametrem ustawionym na SHUTDOWN_ONLY lub CAN_SLEEP.

Aby stan SHUTDOWN_PREPARE działał, kod VHAL musi zawierać 2 z nich: (stan i dodatkowy parametr) w poleceniu AP_POWER_STATE_REQ. Dzięki temu urządzenie przejdzie w tryb garażowy, który wykrywa zaplanowane zadania w JobScheduler i zapobiega zawieszaniu lub wyłączeniu systemu do czasu, aż zadania są już gotowe.

W jaki sposób implementacje urządzeń są powiązane ze strukturą Androida?

W przypadku trybu garażowego platforma prosi VHAL o przedłużenie czasu wyłączenia aż do przekroczenia wymaganego czasu trwania lub do wykonania wszystkich zadań, Kiedy system się wyłącza. W określonych okolicznościach opisane w CDD, implementacje urządzeń mogą spowodować wcześniejsze wyłączenie systemu. Więcej informacji zgodności z Androidem, zapoznaj się z artykułem na temat Dokument definicji zgodności (CDD).

Jeśli VHAL musi wyłączyć system przed zakończeniem trybu garażowego, VHAL może uruchomić SHUTDOWN_PREPARE z parametrem ustawionym na SHUTDOWN_IMMEDIATELY lub SLEEP_IMMEDIATELY. Urządzenie implementacje mogą korzystać z niej tylko w określonych okolicznościach. gdy zasoby potrzebne do utrzymania działania systemu są niedostępne. Dla: na przykład gdy bateria jest niewystarczająca.

Tryb garażu

Rysunek 1. Jak korzystać z Trybu garażowego

Jak deweloperzy 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 Te miejsca pracy są ograniczone Bezczynność jest wykonywana w trybie garażowym.

Ten 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());

Tryb debugowania garażu

Aby debugować tryb garażowy:
  1. Aby włączyć kategorie logowania 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
    
  2. Aby sprawdzić dane wyjściowe dziennika logcat, by pokazać, że uruchamia 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
    
  3. określić dane wyjściowe logcat, które wskazują, że tryb garażowy zakończył się (anulowano lub gotowe):
    [GarageMode]: GarageMode was canceled
    
    lub
    [GarageMode]: GarageMode completed normally
    

    Tryb garażowy zależy od stanu zasilania pojazdu, zgodnie z opisem powyżej.

  4. Sprawdź dane wyjściowe logcat, by sprawdzić, czy zostały wprowadzone 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