Android Q sprd SystemUI (2) 锁屏

2022-07-29,,

锁屏主要涉及到这几个函数调用:
--/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
  Systemui启动的服务,主要传递系统消息到view
--/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
使用binder机制和系统的keyguardservice通讯,得到系统锁屏相关状态回调
--/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
锁屏view的绘制
--/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
锁屏view,具体显示

KeyguardViewMediator初始化
在systemui启动的时候,SystemUIService会调用SystemUIApplication的startServicesIfNeeded()方法,该方法又根据config中的字符串配置,new一个KeyguardViewMediator.KeyguardViewMediator调用KeyguardViewMediator的start方法,初始化,在初始化最后,KeyguardViewMediator把自己的实例放入SystemUIApplication的hashmap mComponents中,让其他函数可以引用.
// 把statusbar和keyguard关联起来,将mViewMediatorCallback传给mStatusBarKeyguardViewManager
mStatusBarKeyguardViewManager =
SystemUIFactory.getInstance().createStatusBarKeyguardViewManager(mContext, mViewMediatorCallback, mLockPatternUtils);

KeyguardService(systemui)的启动
系统启动完成–>PhoneWindowManager.systemReady()–>KeyguardServiceDelegate.onSystemReady()

–>KeyguardService.onSystemReady()–>KeyguardService.onSystemReady()->KeyguardViewMediator.onSystemReady()

锁屏加载KeyguardBouncer过程:
(1)SystemUIApplication启动Statusbar,这里通过createAndAddWindows加载主要的界面,然后调用startKeyguard
(2)在startKeyguard中,调用KeyguardViewMediator的registerStatusbar方法,KeyguardViewMediator是整个待机解/锁屏业务的调度器,负责调度锁屏界面的相关动作及查询解锁屏状态,然后进入StatusBarKeyguardViewManager
(3)(4)StatusBarKeyguardViewManager管理KeyguardBouncer,KeyguardBouncer里面是安全锁界面,它把所有的锁封装起来,然后通过判断当前是什么锁,然后把对应的锁视图显示出来
(5)当滑动锁屏,如果用户设置了锁屏,那么就让安全锁屏界面显示出来
(6)显示锁屏界面
(7)是PhoeWindowmamanegr通过binder调用到KeyguardViewMediator

当按power键亮屏后:
隐藏notificationpanel
StatusBar–>makeExpandedInvisible()
显示锁屏界面
StatusBarKeyguardViewManager -->showBouncer()
解锁核心代码,完成解锁动作,播放声音,隐藏keyguard view
KeyguardViewMediator
mKeyguardGoingAwayRunnable.run();

本文地址:https://blog.csdn.net/weixin_36990104/article/details/108575482

《Android Q sprd SystemUI (2) 锁屏.doc》

下载本文的Word格式文档,以方便收藏与打印。