概述
Keyguard锁屏的加载可能和我们想象的不一样,它是在灭屏的时候加载,这样可以确保的屏幕亮起来的时候,用户能第一时间看到锁屏界面。灭屏存在多种方式,例如按power键、屏幕超时等,这些灭屏的方式虽然不一样,但是殊途同归,我们主要分析按power键时,Keyguard的加载流程。
时序图
流程分析
按键事件的响应是在InputManagerService中,经过一系列的处理和转换最终将会传递到PhoneWindowManager(PWM)的interceptKeyBeforeQueueing()来做具体的业务逻辑,这里我们不分析前面的过程,主要是从PWM开始分析。
Keyguard的加载从finishedGoingToSleep()开始,依次传递,期间还经过IPC过程调用IKeyguardService,最后传到KeyguardViewMediator这里。KeyguardViewMediator这个类是解锁屏模块的中介者,以中介的身份处理keyguard状态变化,处理event、power管理、PhoneWindowManager通知等请求,并作为回调对象供解锁屏模块的其它类回调。
继续往前执行,通过Handler跨线程调用StatusBarKeyguardViewManager