这个值的来源是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传过来。
nativeInputManager的mInterctive变量使policyFlags的POLICY_FLAG_INTERACTIVE置位。
mInterctive是InputManagerService.java中的扩展InputManagerInternal的LocalSerivce类通过jni调用SetInteractive设置。
InputManagerSerivice将LocalService添加到本地服务。
然后PM模块的notifier在onWakefulnessChangedStarted()中,调用获取到的InputManagerInternal的setInteractive
.就这样PM模块修改了nativeInputManager的mInteractive。
Notifier的作用就是广播重要的PowerManager 状态变化。
PowerManagerService在做相关操作时会调用Notifier通知系统和应用。