SystemUI 锁屏模块流程图


1. 整体架构与数据流(分层)

UI 层 (ViewModel + View)

Domain 层 (Interactor)

Data 层 (Repository)

入口 / 中枢

系统底层

亮灭屏

startTransitionTo

通知显隐

PhoneWindowManager

PowerManagerService

生物识别 HAL
(指纹/人脸)

WindowManagerService

KeyguardService
(IKeyguardService Binder)

KeyguardViewMediator
(中枢协调器 CoreStartable)

KeyguardUpdateMonitor
(系统事件观察者)

KeyguardRepository

KeyguardTransitionRepository
(转场唯一数据源)

BiometricSettingsRepository

TrustRepository

DeviceEntryFingerprintAuthRepository

KeyguardInteractor

KeyguardTransitionInteractor

From<State>TransitionInteractor ×9
(状态机出边逻辑)

BiometricUnlockInteractor

KeyguardDismissInteractor

各 <A>To<B>TransitionViewModel

Blueprint + Section
(布局)

Bouncer 安全视图
(PIN/密码/图案/SIM)


2. 锁屏状态机(KeyguardState 转场图)

灭屏/低功耗

开机/亮屏

开启息屏常显

唤醒手势/亮屏

亮屏

进入纯低功耗

唤醒直接解锁

灭屏(AOD开)

灭屏(AOD关)

上滑/点解锁图标

指纹引导

相机/SHOW_WHEN_LOCKED

进入屏保

右边缘滑入

无锁/人脸免上滑解锁

回退到密码

指纹成功

取消

认证成功

收起/取消

被遮挡

退出遮挡Activity

解锁

灭屏

退出屏保

灭屏

左边缘滑回

上滑

重新上锁

灭屏

进入桌面

OFF

DOZING

LOCKSCREEN

AOD

GONE

PRIMARY_BOUNCER

ALTERNATE_BOUNCER

OCCLUDED

DREAMING

GLANCEABLE_HUB

@Deprecated
Scene 框架启用后由
Overlays.Bouncer 取代


3. 灭屏上锁流程

电源键立即上锁

超时灭屏

电源键 / 屏幕超时

PowerManagerService

PhoneWindowManager

IKeyguardService.onStartedGoingToSleep
/ doKeyguardTimeout

KeyguardViewMediator
(NOTIFY_STARTED_GOING_TO_SLEEP)

上锁策略判断

立即上锁

延迟 5s 上锁
(KEYGUARD_LOCK_AFTER_DELAY)

窗口期内亮屏?

取消上锁
回到原状态

是否开启 AOD?

状态机 → AOD

状态机 → DOZING

FromLockscreenTransitionInteractor
.listenForLockscreenToAodOrDozing


4. 亮屏解锁流程(PIN/密码 为例)

KeyguardViewMediator LockPatternUtils SecurityViewFlipperController KeyguardSecurityModel KeyguardTransitionRepository FromLockscreenTransitionInteractor Lockscreen(状态机) 用户 KeyguardViewMediator LockPatternUtils SecurityViewFlipperController KeyguardSecurityModel KeyguardTransitionRepository FromLockscreenTransitionInteractor Lockscreen(状态机) 用户 filterRelevantKeyguardStateAnd (当前在 LOCKSCREEN 且 true) alt [校验成功] [校验失败] 上滑 / 点解锁图标 primaryBouncerShowing = true startTransitionTo(PRIMARY_BOUNCER) 转场动画(显示 Bouncer) getSecurityMode(userId) PIN 实例化 KeyguardPINView 输入 PIN 校验凭据 keyguardDone() 转场 PRIMARY_BOUNCER → GONE 播放解锁离场动画 通知 WindowManager 移除锁屏 显示"密码错误" 失败计数/可能触发锁定

5. 生物识别解锁流程(指纹/人脸)

指纹成功

人脸 + Bypass开

人脸 + Bypass关

超时/锁定/DPM

生物识别 HAL 回调

KeyguardUpdateMonitor

BiometricUnlockInteractor
(生成 BiometricUnlockModel)

识别类型?

WAKE_AND_UNLOCK

停留在 LOCKSCREEN

等待用户上滑
SwipeToDismissInteractor

状态机 → GONE

KeyguardViewMediator
协调解锁离场动画

进入桌面 / 解锁前的应用

需要强认证?
StrongAuthTracker

禁用生物识别
强制走 Bouncer


6. 相机 / 遮挡(Occlusion)流程

是, 非安全相机

否, 安全相机

锁屏双击电源键

listenForTransitionToCamera

keyguard 可消除?

状态机 → GONE

启动相机 Activity

KeyguardOcclusionInteractor
标记被遮挡

状态机 → OCCLUDED

退出相机

FromOccludedTransitionInteractor

状态机 → LOCKSCREEN


7. Bouncer 视图层级(组件关系)

决定

KeyguardSecurityContainerController
管理解锁响应/布局/单手模式/用户切换

KeyguardSecurityViewFlipperController
按 SecurityMode 实例化视图

KeyguardPINView

KeyguardPasswordView

KeyguardPatternView

KeyguardSimPinView

KeyguardSimPukView

SecureLockDeviceBiometricAuthView

KeyguardSecurityModel.getSecurityMode()

secureLockDevice?

SIM PUK?

SIM PIN?

按 PasswordQuality 映射


以上流程图基于源码静态分析。废弃状态(PRIMARY_BOUNCER/GONE/OCCLUDED 等)在 Scene Container 框架启用后由 Scenes/Overlays 取代。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐