知识养成了思想,思想同时又在融化知识。这篇文章主要讲述洞悉Android Keyguard相关的知识,希望能为你提供帮助。
android Keyguard自Android L以来一直没有多大变化。在Android L之前, Keyguard有自己独立的进程,KeyguardService自开机时启动并常驻。Android L之后到Android P,Keyguard和SystemUI共同享有一个进程。process id为com.android.systemui, Keyguard可以看做是SystemUI的一个lib库。可表示为如下:
文章图片
Keyguard架构有较大变化,同时Keyguard UI界面也有很大变化, 包含两个主界面,一个是显示Notification的主界面,称为Notification Keyguard, 另一个是在系统锁屏方式为安全锁时用来用户输入密码解锁的界面,称为Bouncer界面。如下图所示(下面左图为Notification Keyguard界面, 上滑之后进入第二个界面,即Bouncer界面)。
文章图片
文章图片
一、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】
文章图片
文章图片
文章图片
文章图片
下面log是对应flow的关键log, 可以从log check create flow跑到了哪个阶段,可以迅速的debug出问题。
文章图片
二、系统灭屏时Create Keyguard Flow
在系统灭屏时,也会去create keyguard, 默认在power key灭屏之后会去立即create keyguard, 但如果没有勾选"power key立即锁屏",或者是timeout灭屏(即系统无操作,隔一段时间后自动熄屏),则默认会在灭屏之后隔5s才去create keyguard. 灭屏去create keyguard的flow与boot 时去create keyguard flow差不多,只是触发条件不同而已,如下:
文章图片
文章图片
下面log是对应灭屏create keyguard flow的关键log。
文章图片
三、Power Key亮屏Flow
在系统亮屏时,会等keyguard画好之后再亮屏(如果user有设置keyguard的话),即亮屏时会被keyguard block住,等keyguard画完之后会通知PowerManagerService去亮屏。亮屏flow相对简单,如下:
文章图片
文章图片
下面log是对应power key亮屏 flow的关键log。
文章图片
四、Dismiss Keyguard Flow
然后除了create keyguard外,另一重要的flow就是解锁了,用户滑动或者输入密码之后会去解锁。由于Keyguard和SystemUI同属一个进程,并与StatusBar共用一个window的关系,解锁flow比前面稍微复杂一点。下面是以pattern锁为例解锁flow图:
文章图片
文章图片
文章图片
下面log是对应pattern锁屏解锁 flow的关键log。
文章图片
至此,Keyguard几个重要的flow都已介绍完毕,除了常规的锁屏方式外,Android也支持人脸解锁,语音解锁,指纹解锁。这些生物识别的解锁方式也是需要Keyguard的配合才能完成,Android厂商如要开发自己的Keyguard, 不使用Android default Keyguard, 在接入这些生物识别的解锁方式时,需要做一些修改来和自己的Keyguard适配。Hardware -> kernel -> HAL -> framework -> keyguard.
推荐阅读
- appium-desktop 1.6.2 使用
- 用命令方式启动停止appium服务和app
- Android 手风琴效果实现
- Appium 的安装
- android 换行符() 在TextView中显示不正常的问题
- Vpay系统app制作开发
- Android_(游戏)打飞机06(后续)
- Android_(游戏)打飞机05(处理子弹,击中敌机,添加计分板)
- 安卓H5软键盘遮挡输入框