以下分析基于android2.2的google源码。
开机启动时,首先执行PhoneWindowManager.systemReady()(这之前的流程不分析)。调用KeyguardViewMediator.onSystemReady()进行待机锁屏及解锁逻辑。
KeyguardViewMediator是整个待机解/锁屏业务的调度器,负责调度锁屏界面的相关动作及查询解锁屏状态,包括以下一些内容:
查询锁屏状态,及当前处于锁屏状态还是已解锁状态,PhoneWindowManager持有KeyguardViewMediator的引用,当用户触摸屏幕或者按下某个键是,PhoneWindowManager会通过KeyguardViewMediator查询锁屏状态(锁定/解锁),进行不同的响应处理。如果处于锁定状态,系统输入事件会受到限制。
响应电源事件(黑/亮屏)。判断锁屏界面应该处于什么状态(显示或者重置)。手机黑屏后,锁屏界面马上就会显示出来,以便下一次亮屏后,马上就能显示锁屏界面,而不会出现闪烁或延时。
其他应用程序或者服务也可以请求禁止锁屏(通过调用KeyguardViewMediator的setKeyguardEnabled(boolean)方法)。例如接听来电界面。
KeyguardViewMediator类在WindowManagerPolicy(在手机系统中是PhoneWindowManager实例)初始化时被创建,并运行在它的线程上,锁屏的UI界面也是在这个线程上创建及显示的。KeyguardViewMediator类提供的状态查询api可以被诸如android.view.WindowManager、com.android.server.InputManager等其它线程调用,所以,KeyguardViewMediator类上的这些api方法都是线程同步的(synchronized)。
KeyguardViewMediator可以进行的调度操作包括:
1) 点亮屏幕pokeWakelock();
2) 报告锁屏权限验证是否成功keyguardDone(boolean);
3) 响应SIM卡状态变化并对锁屏界面做相应的调整onSimStateChanged()。
4) 调度待机锁屏UI界面的管理,包括显示handleShow ()、隐藏handleHide ()、重置handleReset ()、点亮屏幕handleWakeWhenReady()等,KeyguardViewMediator实现这部分调度是通过持有一个KeyguardViewManager来实现的。
KeyguardUpdateMonitor是所有会影响整个待机解/锁屏业务的事件的监控器。(除了作为监控器,它还发挥着类似上下文的作用,也许我们应该把这个类命名为(KeyguardContext)。它监控诸如时间改变、电池状态改变、时区改变、SIM卡状态变化、电话状态变化、电话信号变化等事件。它是一个观察者模式的被观察对象。观察者通过调用KeyguardUpdateMonitor的registerInfoCallback(InfoCallback)和registerSimStateCallback(SimStateCallback)方法进行注册,观察自己感兴趣的变化。KeyguardUpdateMonitor的观察者包括KeyguardViewMediator、LockScreen、PatternUnlockScreen、AccountUnlockScreen、PasswordUnlockScreen、SimUnlockScreen等。观察者通过调用KeyguardUpdateMonitor的removeCallback(Object)取消观察。
KeyguardViewManager负责管理待机屏UI界面的创建、显示、隐藏、重置以及通过一个回调KeyguardViewCallback通知调度器KeyguardViewMediator进行相关的调度。
LockPatternKeyguardView(KeyguardViewBase)是所有锁屏和解锁UI界面的宿主。它有2个模式Mode. LockScreen和Mode. UnlockScreen。它负责根据当前上下文环境切换当前应该显示的待机屏。它提供一个回调给当前显示的待机屏并处理其回调,如果回调动作是自己处理不了的,则继续报告给KeyguardViewMediator进行处理。
锁屏界面就是LockScreen;解锁界面包括SIM卡解锁SimUnlockScreen、图案解锁PatternUnlockScreen、密码解锁PasswordUnlockScreen、帐号解锁AccountUnlockScreen
解锁成功后,锁屏流程转到KeyguardViewMediator的keyguardDone(boolean, boolean) 进行后续的流程(如转到Launcher桌面)。
分享到:
相关推荐
本文档主要讲解锁屏的启动流程,锁屏的灭屏上锁,锁屏的亮屏解锁逻辑。 此文档适合SystemUI的初学者,能让SystemUI初学者立刻马上接手SystemUI锁屏模块。 有助于SytemUI锁屏的开发。 SystemUI锁屏初学者 SytemUI...
android 滑动解锁实现源代码.zip Android4.2原生锁屏GlowPadView.zip Android滑动解锁.zip android一键锁屏源代码,android4.2工作正常.zip 安卓锁屏和恢复出厂设置功能.rar 按下电源键,再次按下时,弹出自定义界面...
该软件不同于常见的触摸控制的解锁...该软件锁屏解锁功能可根据个人喜好自主设置。 该软件通过光线感应器来控制屏幕的锁定与解锁,所以手机必须要具备光线感应器才能使用这款软件。 请安装前认真阅读readme文件的要求。
基本的锁屏功能 可以屏蔽掉home键等等,可参考
Android 锁屏页面避免被杀掉,解锁会自动关闭页面。防止后台运行时被关闭。 谷歌,小米,华为 亲测可用。 重点解决魅族手机,需要授权应用获得锁屏页面权限。
主要是模仿android端九宫格锁屏解锁功能。简单的实现更换解锁密码,以及保存解锁密码
Android待机流程分析---锁屏、解锁模块源码分析+流程分析图
Android框架浅析之锁屏(Keyguard)机制原理
解决Android锁屏无法继续定位的问题,我在启动定位的时候提示了一个通知,通知的主要功能就是告诉启动了定位。锁屏后通知不会提示!!!在启动定位了之后,往本地写了一个txt文件, txt文件显示的是 “时间、经纬度...
Android锁屏与解屏相关代码分析
Android在有些情况下需要较强的提示,这里仅仅使用通知栏是不够,例如:来电、闹钟。要在特定的情况下唤醒屏幕,设置是在锁屏的情况下。
主要是利用距离传感器实现的android的自动锁屏与解锁
解决Android锁屏无法继续定位的问题,我在启动定位的时候提示了吐司,如果返回定位会显示"启动定位"四个字。在启动定位了之后,往本地写了一个txt文件, txt文件显示的是 “时间、经纬度”等一些信息。可查看确认...
Android 监听Home键、锁屏、解屏处理方法,都有注释。使用简介: (1)、将内部类(广播类)作为MyBroadcastReceiver类的成员变量,方便activity使用 (2)、对外接口类(如:ScreenStateListener)作为...
拯救电源键】最详尽的android开发一键锁屏实例 源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android一键锁屏源代码,android4.2工作正常.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android锁屏无法继续定位问题 产生问题的原因: 手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会将手机进入休眠状态。此时的服务以及线程等都会停止。 最近就这个问题,阅读了很多代码以及官方文档...
android锁屏界面显示,仿播放器。android锁屏界面显示,仿播放器。使用Android Studio开发。
jQuery手机九宫格锁屏解锁代码基于jquery.2.1.3.min.js制作,模仿手机锁屏解锁功能。
android 滑动解锁实现源代码.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。