android开机动画分为正常开机动画启动和休眠唤醒后启动开机动画
1.正常开机动画启动:
正常开机动画是在 SurfaceFlinger.java的init方法里面启动的:


主要是设置ctl.start属性值为bootanim就会启动开机动画。
2.休眠唤醒开机动画启动。
休眠唤醒开机动画是在IpoManagerService.java里面

调用lowPowerHuBoot后会调用开机动画:

3.hardware层接收通知:
/hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/f202mca/CmdSmdManager.cpp

prop = toInt(VehicleProperty::VENDOR_MCU_POWER_MODE1);
commInt32Data(prop, powd);
这个就是通知到Car里面去:
packages/services/Car/service/src/com/android/car/hal/PowerHalService.java

/hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/McuController.cpp

4.在Car里面CarPowerManagementService.java中接收mcu电源状态回调:

5.MSG_POWER_WAKEUP会调用到doHandlePowerWakeup中,然后调用powerWakeup,最后调用到PowerManager的LowPowerStopIPO(1),PowerManager.java调用到PowerManagerService.java,:



下面是PowerManagerService的LowPowerStopIPO方法:

注:关闭开机动画命令setprop service.bootanim.exit 1 (开机动画时需要设置为0)