洞悉Android Keyguard

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述洞悉Android Keyguard相关的知识,希望能为你提供帮助。
      android Keyguard自Android L以来一直没有多大变化。在Android L之前, Keyguard有自己独立的进程,KeyguardService自开机时启动并常驻。Android L之后到Android P,Keyguard和SystemUI共同享有一个进程。process id为com.android.systemui, Keyguard可以看做是SystemUI的一个lib库。可表示为如下:
                           

洞悉Android Keyguard

文章图片

Keyguard架构有较大变化,同时Keyguard UI界面也有很大变化, 包含两个主界面,一个是显示Notification的主界面,称为Notification Keyguard, 另一个是在系统锁屏方式为安全锁时用来用户输入密码解锁的界面,称为Bouncer界面。如下图所示(下面左图为Notification Keyguard界面, 上滑之后进入第二个界面,即Bouncer界面)。
                                               
洞悉Android Keyguard

文章图片
                                         
洞悉Android Keyguard

文章图片

        一、System boot Create Keyguard Flow
        KeyguardService在System boot ready时开始bind, 同时会根据用户设置的锁屏方式去create对应keyguard, 锁屏方式可以分为None(无,即没有锁屏), Swipe(滑动,即滑动解锁),Pattern(图案,输入图案解锁,密码长度至少连接四个点), Password(密码,输入密码解锁,密码由数字和字母组合组成,密码长度至少为4),PIN(PIN, 密码只包含数字, 密码长度至少为4)。System boot时create keyguard flow如下:
 
洞悉Android Keyguard

文章图片

【洞悉Android Keyguard】 
洞悉Android Keyguard

文章图片

洞悉Android Keyguard

文章图片

洞悉Android Keyguard

文章图片

 
 
洞悉Android Keyguard

文章图片

  下面log是对应flow的关键log, 可以从log check create flow跑到了哪个阶段,可以迅速的debug出问题。
洞悉Android Keyguard

文章图片

 
      二、系统灭屏时Create Keyguard Flow
      在系统灭屏时,也会去create keyguard, 默认在power key灭屏之后会去立即create keyguard, 但如果没有勾选"power key立即锁屏",或者是timeout灭屏(即系统无操作,隔一段时间后自动熄屏),则默认会在灭屏之后隔5s才去create keyguard. 灭屏去create keyguard的flow与boot 时去create keyguard flow差不多,只是触发条件不同而已,如下:
 
洞悉Android Keyguard

文章图片

洞悉Android Keyguard

文章图片

  下面log是对应灭屏create keyguard flow的关键log。
洞悉Android Keyguard

文章图片

 
      三、Power Key亮屏Flow
      在系统亮屏时,会等keyguard画好之后再亮屏(如果user有设置keyguard的话),即亮屏时会被keyguard block住,等keyguard画完之后会通知PowerManagerService去亮屏。亮屏flow相对简单,如下:
     
洞悉Android Keyguard

文章图片

 
洞悉Android Keyguard

文章图片

    下面log是对应power key亮屏 flow的关键log。
 
洞悉Android Keyguard

文章图片

 
      四、Dismiss Keyguard Flow
      然后除了create keyguard外,另一重要的flow就是解锁了,用户滑动或者输入密码之后会去解锁。由于Keyguard和SystemUI同属一个进程,并与StatusBar共用一个window的关系,解锁flow比前面稍微复杂一点。下面是以pattern锁为例解锁flow图:
     
洞悉Android Keyguard

文章图片

洞悉Android Keyguard

文章图片

洞悉Android Keyguard

文章图片

    下面log是对应pattern锁屏解锁 flow的关键log。
 
洞悉Android Keyguard

文章图片

 
      至此,Keyguard几个重要的flow都已介绍完毕,除了常规的锁屏方式外,Android也支持人脸解锁,语音解锁,指纹解锁。这些生物识别的解锁方式也是需要Keyguard的配合才能完成,Android厂商如要开发自己的Keyguard, 不使用Android default Keyguard, 在接入这些生物识别的解锁方式时,需要做一些修改来和自己的Keyguard适配。Hardware -> kernel -> HAL -> framework -> keyguard.
 

    推荐阅读