Android 待机流程解析

翻译 2012年03月21日 20:44:53





以下分析基于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智能手机或机顶盒子为了进入省电模式、所以就需要有待机功能。 PowerManager.java 类提供了如下的电源管理功能: public void goToSleep(long t...
  • andyhuabing
  • andyhuabing
  • 2015年11月04日 16:38
  • 5513

android待机流程分析

待机
  • u010481276
  • u010481276
  • 2016年10月20日 14:53
  • 1137

Linux 3.14 待机流程分析

内核不断在升级,从内核3.0开始分析待机流程,最近在3.14检查待机方面问题,发现流程有一些改进 这篇文章就是着重在改进部分的分析...
  • xujianqun
  • xujianqun
  • 2015年06月12日 15:35
  • 3667

Android休眠唤醒驱动流程分析

Android休眠唤醒驱动流程分析(一) **************************************************** 作者:Sean 日期:2012-11-29 修改历...
  • coldsnow33
  • coldsnow33
  • 2014年01月11日 14:47
  • 5044

Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划

美国时间 2013 年 10 月 31 日, Google 正式发布了全新版本的移动操作系统 Android 4.4 KitKat 。据 google 官方介绍,Android 4.4 降低了硬件的...
  • yihongyuelan
  • yihongyuelan
  • 2014年02月28日 15:28
  • 25723

待机电流过大的一些调试方法

转自http://blog.csdn.net/cbk861110/article/details/8496490 今天调试遇到的待机电流过大的问题,借鉴以下的方法 待机电流过大,不光是MTK平台,展讯...
  • wangqijiangblog
  • wangqijiangblog
  • 2013年09月17日 18:33
  • 1682

android睡眠唤醒机制

aaa
  • zsj100213
  • zsj100213
  • 2015年10月26日 15:49
  • 597

【Android休眠】之PowerKey唤醒源实现

版本信息: Linux:3.10 Android: 4.4 一、唤醒源 设备休眠后,通过触发唤醒源使设备恢复正常工作模式。设备唤醒源有多种,对于Android设备常见的就有PowerKey、来电唤...
  • u013686019
  • u013686019
  • 2016年12月15日 22:19
  • 2919

gps各个模块的解析

$GPRMC (最小定位信息) 格 式: $GPRMC,,,,,,,,,,,,*hh 例 子: $GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10....
  • yu314092706
  • yu314092706
  • 2016年11月29日 20:20
  • 709

linux待机流程

linux待机是通过上层应用往sysfs节点/sys/power/state中写入mem, 从而执行整个系统的待机流程。 待机过程首先是冻结用户进程,内核线程,workqueue,接着依次 执行...
  • u014089131
  • u014089131
  • 2017年05月18日 17:38
  • 387
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 待机流程解析
举报原因:
原因补充:

(最多只允许输入30个字)