为了给车辆提供空闲时间,车库模式会让系统保持
这样工作
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 兼容性要求,请参阅 兼容性定义文档 (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