PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源

这个值的来源是powerManager设置的。对应于PowerManagerService.java的mWakeFulness的WAKEFULLNESS_AWAKE和WAKEFULLNESS_DREAMING.

WAKEFULNESS_ASLEEP:表示系统当前处于休眠状态,只能被wakeUp()调用唤醒。

WAKEFULNESS_AWAKE:表示系统目前处于正常运行状态。

WAKEFULNESS_DREAMING:表示系统当前正处于屏保的状态。

WAKEFULNESS_DOZING:表示系统正处于“doze”状态。

我们流程反着看吧。

PhoneWindowManager.java的interceptKeyBeforQueuing的policyFlags参数,决定了interactive。

PhoneWindowManager.java的interceptKeyBeforQueuing怎么掉过来呢?

是从native C++层的nativeInputManager-》interceptKeyBeforQueuing传过来。

PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源_第1张图片

PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源_第2张图片

nativeInputManager的mInterctive变量使policyFlags的POLICY_FLAG_INTERACTIVE置位。

mInterctive是InputManagerService.java中的扩展InputManagerInternal的LocalSerivce类通过jni调用SetInteractive设置。

PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源_第3张图片

InputManagerSerivice将LocalService添加到本地服务。

然后PM模块的notifier在onWakefulnessChangedStarted()中,调用获取到的InputManagerInternal的setInteractive

.就这样PM模块修改了nativeInputManager的mInteractive。

PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源_第4张图片

Notifier的作用就是广播重要的PowerManager 状态变化。

PowerManagerService在做相关操作时会调用Notifier通知系统和应用。

PhoneWindowManager().interceptKeyBeforeQueueing()中的interactive变量值的来源_第5张图片

你可能感兴趣的:(android移动网络通讯)