学徒浅析Android——Android 8.0 Lock解锁流程

时间:2024-05-19 13:28:25

解锁流程

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等待时期

具体流程图如下图所示:

学徒浅析Android——Android 8.0 Lock解锁流程