-
1.概述
Android的亮屏流程从android系统结构层次来分可以分为三个流程,App应用唤醒源;Framework层Power结合Display,Light服务做亮屏绘制准备工作;底层驱动点亮背光灯。这里重点分析一下Framework层亮屏的一系列准备工作流程。
-
2.流程分析
-
2.1 唤醒源
通过了解PowerManagerService的工作流程可以发现android的唤醒屏幕的唤醒源总共有四种:1.应用直接调用PowerManager的WakeUp接口;2.应用在申请wakelock时候,添加ACQUIRE_CAUSES_WAKEUP的flag,3.应用Activity在创建时候,带有WindowManager的FLAG_TURN_SCREEN_ON的flag(本质调用到PowerManagerService的WakeUp操作)。4.Power键唤醒是通过Input事件调用到PhoneWindowManager中的按键事件处理函数interceptKeyBeforeQueueing中去调用PowerManager的wakeup接口
这里先简单介绍一下较为较为特殊的第二,三种类型的唤醒源,后面关于wakeup的流程会详细的说明。
1.应用申请wakelock带有ACQUIRE_CAUSES_WAKEUP标志:当应用在申请wakelok时候,会在PowerManagerService的中去执行updatePowerStateLocked更新电源状态操作,熟悉PowerManagerService的人会清楚updatePowerStateLocked是整个PowerManagerService的核心函数,只要系统接收到与Power相关的事件(如:申请wakelock,开机,设置改变,用户操作等等)之后会第一时间去执行updatePowerStateLocked更新电源状态。但是在申请wakelock时候,在acquireWakeLockInternal中会调用applyWakeLockFlagsOnAcquireLocked函数去判断wakelock是否带有ACQUIRE_CAUSES_WAKEUP,如果带有该标志会直接跳入wakeUpNoUpdateLocked函数内,该函数是便是WakeUp唤醒系统的必须要走的调用函数。
2.Activity创建带有FLAG_TURN_SCREEN_ON标志:以IncallActivity为例
1).电话来电时首先。会