android4.2 keyguard流程

锁屏源码路径:frameworks/base/policy/src/com/android/internal/policy/impl/keyguard


开机..., SystemServer启动后,在一切准备妥当之后,会根据需要通知不同的service.systemReady。
WindowManagerService.systemReady() --> PhoneWindowManager.systemReady(), 因为PhoneWindowManager是WindowManagerPolicy的子类。
--> mKeyguardMediator.onSystemReady() --> doKeyguardLocked() --> showLocked() --> handleShow() 
--> mKeyguardViewManager.show(options) --> maybeCreateKeyguardLocked() 
--> mKeyguardView.show() --> showPrimarySecurityScreen(true) --> showSecurityScreen(securityMode) [ SecurityMode securityMode = mSecurityModel.getSecurityMode() ] --> getSecurityView()




mKeyguardMediator: 调解和keyguard相关请求的类。它包括查询keyguard状态,电源管理相关的事件,因为电源管理事件会影响keyguard的设置或重置,
该类回调PhoneWindowManager通知它说keyguard正在显示,或者解锁成功等状态。


注:keyguard画面是在屏幕关闭的时候显示的,所以当屏幕亮起来的时候,keyguard画面能够直接准备好了。


比如,查询keyguard的例子:某个事件能够唤醒Keyguard吗?keyguard正在显示吗?某个事件会被锁屏的状态约束而不起作用吗?
回调PhoneWindowManager的情况:锁屏正在显示。 
导致锁屏状态变化的样例:屏幕关闭,重置锁屏,并且显示出来以便于下次屏幕亮起是能够直接显示。
键盘打开,如果keyguard是不安全的,就隐藏它。从解锁画面发生的事件:用户成功解锁,隐藏解锁画面,不再约束用户的输入事件。
注:除了电源管理能够影响keyguard的状态外,其他的一些app或者service可能会通过方法setKeyguardEnable去关闭keyguard,比如接到电话时。
这个类是在WindowManagerPolicy初始化的时候创建的,并且运行在WindowMangerPolicy所在的线程,keyguard的画面从这个线程中创建的当keyguardViewMediator构建时。
但是Keyguard相关的api可能会被其他的线程调用,比如InputManagerService和windowManagerService。
因此在keyguardViewMediator的方法是同步的,并且任何一个和Keyguard画面相关的事件都投掷到Handler中以确保在UI线程中处理。

你可能感兴趣的:(android)