CarService启动后会创建CarPowerManagementService并调用其init函数:
//packages/services/Car/service/src/com/android/car/power/CarPowerManagementService.java
public class CarPowerManagementService extends ICarPower.Stub implements
CarServiceBase, PowerHalService.PowerEventListener {
private final PowerHalService mHal;
private final SystemInterface mSystemInterface;
private final PolicyReader mPolicyReader = new PolicyReader();
public void init() {
mPolicyReader.init();
mPowerComponentHandler.init(); //初始PowerComponentHandler对象
mHal.setListener(this); //调用PowerHalService设置监听器
if (mHal.isPowerStateSupported()) {
// Initialize CPMS in WAIT_FOR_VHAL state
onApPowerStateChange(CpmsState.WAIT_FOR_VHAL, CarPowerManager.STATE_WAIT_FOR_VHAL); //如果VHAL支持电源状态,电源状态迁移到STATE_WAIT_FOR_VHAL
} else {
Slogf.w(TAG, "Vehicle hal does not support power state yet.");
onApPowerStateChange(CpmsState.ON, CarPowerManager.STATE_ON); //如果VHAL不支持电源状态,电源状态迁移到ON
}
mSystemInterface.init(this, mUserService); //Systeminterface初始化
mSystemInterface.startDisplayStateMonitoring();
connectToPowerPolicyDaemon(); //连接到电源策略守护进程
}
}
在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。
//packages/services/Car/service/src/com/android/car/hal/PowerHalService.java
public class PowerHalService extends HalServiceBase {
private LinkedList<HalPropValue> mQueuedEvents;
public void setListener(PowerEventListener listener) {
LinkedList<HalPropValue> eventsToDispatch = null;
synchronized (mLock) {
mListener = listener;
if (mQueuedEvents != null && mQueuedEvents.size() > 0) {
eventsToDispatch = mQueuedEvents;
}
mQueuedEvents = null;
}
// do this outside lock


1289

被折叠的 条评论
为什么被折叠?



