解锁流程
1、Android8.0的Lock解锁处理统一由LockPatternChecker.checkPassword实现,LockPatternChecker.checkPassword提供了两个回调接口,其中onEarlyMatched()处理验证成功,onChecked处理验证失败。
2、密码验证成功后,立刻执行KeyguardSecurityCallback#dismiss(true)执行页面消操作,由于SecurityView是加载在KeyguardHostView上,锁屏页面持有的KeyguardSecurityCallback对象,实际是KeyguardHostView#mSecurityContainer自身.,所以最终的执行方法实际是KeyguardHostView.finish(true)。
3、KeyguardHostView在执行finish()同时,会通过KeyguardViewMediator#keyguardDone()通知KeyguardViewMediator执行消失流程。后续流程由KeyguardViewMediator统一管理。
4、KeyguardViewMediator首先运行mKeyguardGoingAwayRunnable,这个过程包括通知WindowManager修改保存的keyguard标记,通知PhoneWindowManager执行削除操作。通知StatusBar和StatusBarKeyguardManager修改保存的keyguard标记等。总之就是标记位的变换。
5、PhoneWindowManager在收到keyguard标记变化的通知后,进一步通知KeyguardViewMediator#handleStartKeyguardExitAnimation()执行最后的收尾操作,主要包括如下三个操作:
1、通知锁屏页面执行onPaus()
2、通知StatusBarManager修改lock标记,
3、发送锁屏页面消失广播(Intent.ACTION_USER_PRESENT)
6、KeyguardServiceDelegate会接收到Intent.ACTION_USER_PRESENT,到此解锁流程结束,重新进入Lock等待时期
具体流程图如下图所示: