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