以下分析基于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桌面)。
分享到:
相关推荐
### Android待机流程详解 #### 一、概览 Android系统的待机流程是用户界面管理中的一个重要组成部分,它涉及到系统如何处理设备锁屏状态下的各种交互逻辑。在Android 2.2版本中,这一过程主要由`...
### Android待机流程分析——锁屏、解锁模块 在深入探讨Android系统中锁屏与解锁模块的工作原理之前,我们先来了解一下这些概念的基本背景。Android操作系统作为全球最广泛使用的移动设备操作系统之一,其用户界面...
这部分将深入源代码,解析通知的创建、显示和管理流程。 十、多媒体支持 Android 5.0对多媒体框架进行了优化,包括音频、视频编码解码及播放。这部分将介绍多媒体框架的结构,以及如何开发媒体应用。 通过对这些...
7. **编译与构建**:掌握AOSP(Android Open Source Project)的编译流程,使用mm、mka命令构建特定模块。 Android 5.0源码的学习不仅能够帮助开发者深入理解Android系统,还能为定制ROM、系统优化、漏洞分析等提供...
《Unity中的蓝牙低功耗(Bluetooth LE)技术详解》 在移动应用开发领域,尤其是在游戏开发中,Unity引擎因其强大的跨平台能力和丰富的图形渲染能力而备受青睐。随着物联网(IoT)技术的发展,蓝牙低功耗(Bluetooth...
【Android文件上传服务库详解】 在移动开发领域,尤其是在Android平台,文件上传是常见的功能需求。开发者们常常需要实现将用户设备上的文件如图片、视频、文档等上传至服务器。"一个支持Android文件上传服务的库....
【Android初始化流程详解】 在Android系统启动过程中,一系列复杂的初始化步骤是必不可少的。首先,Linux基础系统被加载,随后引导Linux内核启动。初始化进程init是这个阶段的关键,它负责控制系统的启动流程。 接...
### H3 Android定制化文档知识点解析 #### 一、引言 - **编写目的**:本文档旨在为全志H3平台的Android系统提供定制化的指导,帮助开发者了解如何根据不同的需求对Android系统进行定制,以满足特定的应用场景。 - *...
通过分析Android 17的源码,开发者可以更好地理解Android系统的工作流程,优化应用性能,解决系统级问题,同时也能为自定义ROM和系统扩展提供基础。不断深入学习和实践,将有助于成为一名更优秀的Android开发者。
本文将详细解析Linux内核中的休眠过程,以及Android系统如何利用这些机制。 休眠(suspend)在Linux内核中涉及三个主要阶段: 1. **冻结进程**:内核会暂停所有用户态和内核态的任务,保存它们的状态。解冻时,进程...
所以,如果要在用户应用中实现定时关机,可能需要通过JNI(Java Native Interface)调用C或C++的库,这些库能够访问Android内核级别的函数,比如触发系统的关机流程。 4. **BroadcastReceiver**: 可以创建一个`...
这些数据经过处理后,由Android设备进行解析并执行相应的操作,如启动冲洗、干燥等流程。同时,设备还可以根据预设的节能模式,在非使用期间自动进入待机状态,以节省能源。 在功能上,该系统具备多项先进特性。...
《Android优化大师源代码解析》 在Android应用开发领域,性能优化是提升用户体验的关键环节。本文将深入探讨“Android优化大师”源代码,揭示其中蕴含的优化策略和技术手段,帮助开发者提升自己的Android应用性能。...
这些截图对于理解应用的用户界面和交互流程非常有帮助,可以让我们预览应用的外观和基本操作。 "源码说明.txt"文件很可能是对源码的简要介绍,包括了开发环境、依赖库、主要功能模块的概述,以及可能存在的问题和...
本文总结了NFC的基本概念、硬件结构、Android系统中的总体框架以及NFC服务的初始、启动、P2P模式、标签读写以及Android Beam等工作流程。通过对这些内容的详细分析,可以帮助读者更好地理解NFC技术,并为实际开发和...
**Android SDK 24详解** Android SDK(Software Development Kit)是开发Android应用程序的重要工具集,它包含了一系列的组件,如编译器、调试工具、模拟器以及API文档等,为开发者提供了构建、测试和发布Android...
1. **Doze模式**:Android 23引入的Doze模式是一种深度休眠机制,旨在延长设备的待机时间。源码分析可以帮助我们理解如何检测设备的活动状态,何时进入和退出Doze模式,以及系统如何限制后台进程和网络访问以节省...