Чтобы обеспечить периоды простоя в транспортных средствах, 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());
Отладка гаражного режима
Чтобы отладить гаражный режим:- Чтобы включить категории ведения журнала, относящиеся к режиму гаража:
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, чтобы указать, что 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
- Чтобы определить, что вывод 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