Android P 电源管理(4)待机流程
电视遥控器,短端走待机(str待机)流程, 长按是关机,走关机流程,记录下待机流程。
参考博客
- https://blog.csdn.net/andyhuabing/article/details/49638899
- https://blog.csdn.net/lezhang123/article/details/81273952/
- https://blog.csdn.net/yipie/article/details/8006574
待机流程
Android P引入自动待机功能,只有存在WakeLock,wakeup_count就不会为0,每次acquire wake_lock会让wakeup_count加1,而release wake_lock会让wakeup_count减1,当wakeup_count为0则autosuspend会重新待机下去
相关代码
frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
hardware/interfaces/power/1.0/default/Power.cpp
hardware/realtek/power/power.cpp
hardware/realtek/power/power.cpp
代码流程
goToSleepInternal()
-->goToSleepNoUpdateLocked()
-->setWakefulnessLocked(WAKEFULNESS_DOZING);
updatePowerStateLocked()
--> updateDisplayPowerStateLocked() //关闭屏幕
--> updateDreamLocked() //更新屏保状态
--> finishWakefulnessChangeIfNeededLocked()
-->mNotifier.onWakefulnessChangeFinished() //通知AMS, WMS系统状态改变。
--> updateSuspendBlockerLocked()
reallyGoToSleepNoUpdateLocked() //更新屏保状态,发现是DOZE状态后,会调用这个接口。
--> setWakefulnessLocked(WAKEFULNESS_ASLEEP)
updatePowerStateLocked()
--> updateDisplayPowerStateLocked()
--> updateDreamLocked()
--> finishWakefulnessChangeIfNeededLocked()
-->mNotifier.onWakefulnessChangeFinished() //通知AMS, WMS系统状态改变。
--> updateSuspendBlockerLocked() //释放系统锁,进入待机。
-->setHalAutoSuspendModeLocked()
待机唤醒
唤醒支持不同的唤醒源,网络待机唤醒,Power按键唤醒,CEC唤醒等,部分流程有抽象和实际可能会有差异。
android p唤醒.png
待机时候应用处理
蓝牙,WiFi,媒体中心等模块在待机的时候,如果需要释放资源,可以先获取并持有wakelock,等释放完资源后在释放wakelock。