Гараж Режим

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

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

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

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

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

Чтобы активировать Garage Mode, при выключении автомобиля Vehicle 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 . Реализации устройств могут использовать это только при определенных обстоятельствах, обычно когда ресурсы, необходимые для поддержания работы системы, недоступны. Например, когда емкости аккумулятора недостаточно.

Режим гаража

Рисунок 1. Порядок действий в режиме гаража

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

Приложения и сервисы не взаимодействуют напрямую с режимом гаража. Вместо этого приложения планируют задания в 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, чтобы указать, что режим гаража запускается:
    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