锁屏源码路径:frameworks/base/policy/src/com/android/internal/policy/impl/keyguard


开机..., SystemServer启动后,在一切准备妥当之后,会根据需要通知不同的service.systemReady。
WindowManagerService.systemReady() --> PhoneWindowManager.systemReady(), 因为PhoneWindowManager是WindowManagerPolicy的子类。
--> mKeyguardMediator.onSystemReady() --> doKeyguardLocked() --> showLocked() --> handleShow() 
--> mKeyguardViewManager.show(options) --> maybeCreateKeyguardLocked() 
--> mKeyguardView.show() --> showPrimarySecurityScreen(true) --> showSecurityScreen(securityMode) [ SecurityMode securityMode = mSecurityModel.getSecurityMode() ] --> getSecurityView()




mKeyguardMediator: 调解和keyguard相关请求的类。它包括查询keyguard状态,电源管理相关的事件,因为电源管理事件会影响keyguard的设置或重置,
该类回调PhoneWindowManager通知它说keyguard正在显示,或者解锁成功等状态。


注:keyguard画面是在屏幕关闭的时候显示的,所以当屏幕亮起来的时候,keyguard画面能够直接准备好了。


比如,查询keyguard的例子:某个事件能够唤醒Keyguard吗?keyguard正在显示吗?某个事件会被锁屏的状态约束而不起作用吗?
回调PhoneWindowManager的情况:锁屏正在显示。 
导致锁屏状态变化的样例:屏幕关闭,重置锁屏,并且显示出来以便于下次屏幕亮起是能够直接显示。
键盘打开,如果keyguard是不安全的,就隐藏它。从解锁画面发生的事件:用户成功解锁,隐藏解锁画面,不再约束用户的输入事件。
注:除了电源管理能够影响keyguard的状态外,其他的一些app或者service可能会通过方法setKeyguardEnable去关闭keyguard,比如接到电话时。
这个类是在WindowManagerPolicy初始化的时候创建的,并且运行在WindowMangerPolicy所在的线程,keyguard的画面从这个线程中创建的当keyguardViewMediator构建时。
但是Keyguard相关的api可能会被其他的线程调用,比如InputManagerService和windowManagerService。
因此在keyguardViewMediator的方法是同步的,并且任何一个和Keyguard画面相关的事件都投掷到Handler中以确保在UI线程中处理。

更多相关文章

  1. android 多线程刷新Location
  2. Android(安卓)- monkey 参数说明
  3. onContextItemSelected 与 onMenuItemSelected 的那些事
  4. 解决Content的startActivity方法报错
  5. android转页面
  6. Android中一种ThreadPool的实现
  7. Android(安卓)下拉刷新 左右滑动 事件冲突
  8. Android(安卓)Service那些不得不说的事-之一

随机推荐

  1. 详解Android/IOS平台下抓包工具使用以及
  2. 一款现代、高效的 Android(安卓)图片压缩
  3. [造轮子]Android动态加载框架总结
  4. Android自定义一个属于自己的时间钟表
  5. Android程序员的十大转型之路总结
  6. Android线程池-学习总结
  7. Android官方MVP+Loader示例学习
  8. 用Tasker转发Android上收到的短信至Teleg
  9. Android入门——画布Canvas的简单应用
  10. Camera的学习,图片的保存(两种),获取手机图片