Android待机流程分析

Android UI 应用服务器 Google



以下分析基于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桌面)。

转自:http://helin-era.iteye.com/blog/969930

更多相关文章

  1. Android动态显示和隐藏状态栏探究。
  2. Android的用户界面
  3. Android(安卓)入门到精通 (界面编程#2-Menu)
  4. fitsSystemWindows的理解与沉浸式状态栏实现
  5. React Native For Android初探
  6. Android开发实践 界面编程(中)
  7. Android(安卓)登录界面Demo源码
  8. Android(安卓)渐变色沉浸式状态栏
  9. Android打开WLAN开关的广播状态监听

随机推荐

  1. Android中使用jni进行本地开发
  2. Android(安卓)IPV6获取方式
  3. add ADT eclipse Plugin for Android
  4. Android之短信监听与内容获取
  5. Android国内一些比较知名的大牛
  6. android 模拟器代理上网
  7. Android中 字符串-数字 的转化
  8. Android 让界面不被弹出的键盘挤上去
  9. ListView中的ITEM从最底部开始显示,就加2
  10. 在android中实现两张图片对比