2019独角兽企业重金招聘工程师标准>>>
锁屏的加载可能和我们想象的不一样,它是在灭屏的时候加载,这样可以确保的屏幕亮起来的时候,用户能第一时间看到锁屏界面 。灭屏存在多种方式,例如按power键、屏幕超时等,这些灭屏的方式虽然不一样,但是殊途同归,我们主要分析按power键时,的加载流程 。
时序图
文章插图
【8.0Android O Keyguard解锁流程】
文章插图
流程分析
按键事件的响应是在中,经过一系列的处理和转换最终将会传递到(PWM)的()来做具体的业务逻辑,这里我们不分析前面的过程,主要是从PWM开始分析 。
的加载从()开始,依次传递,期间还经过IPC过程调用,最后传到这里 。这个类是解锁屏模块的中介者,以中介的身份处理状态变化,处理event、power管理、通知等请求,并作为回调对象供解锁屏模块的其它类回调 。
继续往前执行,通过跨线程调用,再调用的(),这里有一个判断,如果此时是在界面,那就会调用的()方法去暂停,而在其他不可见的界面,就不需要调用()方法,显然因为它都没显示所以不需要去Pause() 。
往下又通过去调用了r.(),这里主要是去更新指纹解锁的状态,因为灭屏了如果有指纹的话就可以开始监听指纹解锁,就是在这里去开始监听;值得一提的是,现如今的人脸解锁也是在这个地方去更新状态,所不同的是,人脸需要亮屏才开始监听 。
继续往前执行,接下来就要处理绘制的逻辑了,这部分主要是在中,首先会调用er去更新当前的视图,这个方法只要是手机屏幕视图改变就会被调用,所以在绘制完成后,还会调用一次 。接着调用reset()去重置view的状态,然后调用d()方法去显示 还是,在灭屏的情况下,再次亮屏看到的一般是,就是有消息通知、时间之类的那个view,上滑才会显示密码解锁界面,也就是 。接着就会调用(),当然由于还没有绘制内容,所以会进行的绘制 。这里会调用()去隐藏已有的,因为下次亮屏的时候可能不是原来的锁屏方式 。例如原来是PIN解锁,而我们在去重置了锁屏为,那下次亮屏就应该显示的view 。
接下来就要绘制新的了,调用(),往下执行到ainer的(),这里会根据当前的设置的安全模式,也就是锁屏方式,去获取相应的,这里我们不研究各种锁屏方式的view具体怎么绘制,只关心 view的绘制,所以不往下深究 。在获取到新的之后,调用()方法,然后绘制到上 。
文章插图
从时序图上面可以看出来,这系列操作是串行的,所以在绘制完成之后,的()会调用er的show()方法,此时就已经绘制完毕了,当然因为已经灭屏了,所以你并不能看到界面,当下次亮屏的时候,就会看到绘制好了的 。
- Android属性系统简介【转】
- 提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除
- Android studio:Connection failed 网络配置错误
- 琴琪拉吉他 团队Android小作品Chinchilla Guitar发布
- 基于Android的电子书阅读器(Android studio毕业设计
- Android ViewGroup中事件触发和传递机制
- android----R8混淆编译
- android 脱壳 虚拟机
- Android 自带Sipdemo的使用讲解
- 2023Android程序员找工作现状分析