Гараж Режим

Чтобы обеспечить периоды простоя в транспортных средствах, Garage Mode поддерживает систему в активном состоянии, чтобы можно было выполнять задания в JobScheduler , ограниченные бездействием .

Что такое гаражный режим?

На подключенных устройствах, таких как телефоны, пользователи полагаются на систему, чтобы гарантировать стабильность, актуальность и оптимизацию устройств. Для достижения этого состояния платформа Android предоставляет окно времени простоя , в течение которого приложения могут выполнять задачи, когда пользователь не взаимодействует с устройством. Телефон считается бездействующим , если пользователь не прикасается к нему в течение длительного времени (60 минут и более) и экран выключен. В отличие от телефона, когда автомобиль не используется, он выключен, а значит, у автомобиля нет окна времени простоя . Режим «Гараж» обеспечивает время простоя в автомобиле.

Когда автомобиль выключается пользователем, система переходит в гаражный режим. Пока автомобиль находится в гаражном режиме, система включена, дисплей выключен, и выполняются незанятые задания в очереди JobScheduler. Чтобы реализовать гаражный режим, см. ниже рекомендации по внедрению устройства .

Рекомендации по внедрению устройств

Чтобы активировать режим гаража, при выключении транспортного средства HAL (VHAL) транспортного средства должен отправить AP_POWER_STATE_REQ с состоянием SHUTDOWN_PREPARE с параметром, установленным в SHUTDOWN_ONLY или CAN_SLEEP .

Чтобы состояние SHUTDOWN_PREPARE было эффективным, VHAL должен указать два параметра (состояние и дополнительный параметр) для команды AP_POWER_STATE_REQ . Это позволяет устройству перейти в гаражный режим, который обнаруживает запланированные задания в JobScheduler и предотвращает приостановку или завершение работы системы до тех пор, пока задания не будут завершены.

Как реализации устройств подключаются к платформе Android?

В гаражном режиме платформа запрашивает у VHAL продление времени выключения до тех пор, пока не будет превышена требуемая продолжительность или не будут выполнены все задания, после чего система будет выключена. При определенных обстоятельствах, определенных в CDD, реализации устройств могут завершить работу системы раньше. (Подробнее о требованиях совместимости с Android см. в документе определения совместимости с Android (CDD) .) Если VHAL должен завершить работу системы до завершения режима гаража, VHAL может выдать команду SHUTDOWN_PREPARE с параметром, установленным на SHUTDOWN_IMMEDIATELY или SLEEP_IMMEDIATELY . Реализации устройств могут использовать это только при определенных обстоятельствах, как правило, когда ресурсы, необходимые для поддержания работы системы, недоступны. Например, когда емкость аккумулятора недостаточна.

Режим гаража

Как разработчики приложений работают с Garage Mode?

Приложения и службы не взаимодействуют напрямую с Garage Mode. Вместо этого приложения планируют задания в JobScheduler . Те задания, которые связаны с бездействием , выполняются в гаражном режиме.

В следующем коде показано, как запланировать запуск задания в гаражном режиме:

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

Отладка гаражного режима

Чтобы отладить гаражный режим:
  1. Чтобы включить категории ведения журнала, относящиеся к режиму гаража:
    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. Чтобы просмотреть выходные данные logcat, чтобы указать, что Garage Mode запускается:
    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. Чтобы определить, что вывод logcat указывает на завершение режима гаража (отмена или завершение):
    [GarageMode]: GarageMode was canceled
    
    или
    [GarageMode]: GarageMode completed normally
    

    Режим гаража зависит от состояния питания автомобиля, как описано выше.

  4. Просмотрите выходные данные logcat, чтобы указать, что введены правильные состояния питания:
    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