锁屏其实一直都是SystemUI的一部分,只是android8.0之前,它是单独编译成java静态库,作为SystemUI的依赖使用的。网上关于Java静态库的介绍比较多,这里就不详述啦。

锁屏的结构

:锁屏大致分为两部分,第一部分是手机亮屏之后直接能看到的界面。称为非安全锁屏界面,这个界面其实包含在SystemUI的notificationPanelView的布局中,根据手机是否处于锁屏状态调整各个view的属性值(比如visibility、width、height等),从而决定了notificationPanelView的样子。如下图:

android 显示 锁屏界面 安卓锁屏界面_静态库


如果设置了锁屏密码,在上图的界面上滑,就能进入安全锁屏界面啦。也就是被称为Bouncer的界面。Bouncer界面包含了各种锁屏密码,根据具体设置的密码type不同显示不同的界面。包括pattern 、password、 SIM PIN、SIM PUK等。如下图:

android 显示 锁屏界面 安卓锁屏界面_静态库_02


这个界面的特点是,它并不包含在某个xml布局文件中,是动态添加上去的,与NotificationPanelView并列,都是添加到的布局StatusBarWindowView中。

锁屏的流程:

锁屏大致包含如下几个流程:
1、第一次开机(这个流程最简单,正常是不显示锁屏界面的)
2、开机启动到锁屏界面的上锁流程。
3、灭屏(按power键、屏幕超时等原因)时的上锁流程。
这里解释一下:平时亮灭屏看到的锁屏界面,其实是在灭屏的时候显示完成的,只是因为屏幕已经灭了,用户看不到。这样,下次亮屏的时候才能快速的显示给用户看,而不会有延迟。
4、解锁流程:

解锁流程又可以具体分为:(1)上滑直接解锁流程   (2) 通过Bouncer界面解锁流程  (3)指纹解锁流程  (4)人脸解锁流程

上面是比较普遍的几种解锁方式,当然还有其它的一些,比如虹膜解锁、声纹解锁等等。
这里还要注意的一点是带GMS包的系统,有Google的Trust engine,用户开启此功能后,在一定条件(比如手机未离开用户身体,手机在用户设定的某些地点坐标附近、手机已经与某可信任的设备连接等)下,不会锁屏。其实就是识别到这些条件直接解锁。