然后走WAIT_FOR_VHAL状态
发布时间:2025-06-24 19:07:58 作者:北方职教升学中心 阅读量:249
首先,什么是深度睡眠(Deep Sleep)?
Android进入Deep Sleep后,关闭屏幕、PowerHandlerhandler;releaseTimerLocked();handler =mHandler;handler.handleProcessingComplete();}else{// 定期通过PowerServiceHAL向Vehicle HAL发送延时通知。
感觉这种方式,跟snapshot快启动有点类似。// 可以看出恢复前,要刷新一下屏幕亮度。// 之后的代码,就是CPU上电后的恢复流程了。
下面的图,是Android官网对于深度睡眠的时序图。
DeepSleep或STR,需要内核配合实现。
- packages/services/Car/service/src/com/android/car/CarPowerManagementService.java
privatevoiddoHandlePowerStateChange(){mCurrentState =state;switch(state.mState){// 省略caseCpmsState.SUSPEND:// Received FINISH from VHAL// 走这里handleFinish();break;default:// Illegal state// TODO: Throw exception?break;}}privatevoidhandleFinish(){// 省略// 关闭VoicesetVoiceInteractionDisabled(true);// To make Kernel implementation simpler when going into sleep.disableWifi();if(mustShutDown){// shutdown HUmSystemInterface.shutdown();}else{// 处理深入睡眠doHandleDeepSleep(simulatedMode);}mShutdownOnNextSuspend =false;}privatevoiddoHandleDeepSleep(booleansimulatedMode){// keep holding partial wakelock to prevent entering sleep before enterDeepSleep call// enterDeepSleep should force sleep entry even if wake lock is kept.mSystemInterface.switchToPartialWakeLock();mHandler.cancelProcessingComplete();synchronized(mLock){mLastSleepEntryTime =SystemClock.elapsedRealtime();}intnextListenerState;if(simulatedMode){// 省略}else{// 最终会调用Kernel接口,Supend To RAM(感兴趣的小伙伴可以顺着这个接口看下去。
