Android 按power键唤醒屏幕流程
2013-01-12 21:20
363 查看
http://blog.csdn.net/shadow_dance/article/details/8070252
屏幕唤醒流程:
屏幕唤醒流程:
/framework/base/policy下面KeyguardViewMediator.java里面 public void pokeWakelock(int holdMs) { synchronized (this) { if (DBG_WAKE) Log.d(TAG, "pokeWakelock(" + holdMs + ")"); mWakeLock.acquire(); mHandler.removeMessages(TIMEOUT); mWakelockSequence++; Message msg = mHandler.obtainMessage(TIMEOUT, mWakelockSequence, 0); mHandler.sendMessageDelayed(msg, holdMs); } } 这个方法就是用mHandler去执行TIMEOUT事件。 可以看得出来,每次调用的时候,先remove上一个TIMEOUT msg,然后mHandler.sendMessageDelayed(msg, holdMs); 在holdMs时间内(如果有用户事件响应),会重新调用这个方法,重新remove这个msg,重新mHandler.sendMessageDelayed(msg, holdMs);也就是时间重置了,如果接下来的holdMs时间没有用户相应,mHandler就会执行对应的休眠事件(本质就是释放wakelock,pm发现没有wakelock就自动进入sleep状态)。 你到framework/base/policy下面搜索会发现蛮多地方调用这个方法,对应很多不同的情况。 拿大家最熟悉的Settings中设置的锁屏时间来说吧: 在PhoneWindowManager.java中 /** {@inheritDoc} */ public void screenTurnedOn() { EventLog.writeEvent(70000, 1); mKeyguardMediator.onScreenTurnedOn(); synchronized (mLock) { mScreenOn = true; updateOrientationListenerLp(); updateLockScreenTimeout(); } } 屏幕一变亮,就 updateLockScreenTimeout();更新这个定时锁屏的时间 private void updateLockScreenTimeout() { synchronized (mScreenLockTimeout) { boolean enable = (mAllowLockscreenWhenOn && mScreenOn && mKeyguardMediator.isSecure()); if (mLockScreenTimerActive != enable) { if (enable) { if (localLOGV) Log.v(TAG, "setting lockscreen timer"); mHandler.postDelayed(mScreenLockTimeout, mLockScreenTimeout); } else { if (localLOGV) Log.v(TAG, "clearing lockscreen timer"); mHandler.removeCallbacks(mScreenLockTimeout); } mLockScreenTimerActive = enable; } } } 看得出来,也是先remove再post msg的方法,更新时间(指的是从现在起剩下多少时间来关屏)。 这里的 mLockScreenTimeout = Settings.System.getInt(resolver, Settings.System.SCREEN_OFF_TIMEOUT, 0);也就是Settings中设置的时间啦。 mScreenLockTimeout是个Runnable对象: Runnable mScreenLockTimeout = new Runnable() { public void run() { synchronized (this) { if (localLOGV) Log.v(TAG, "mScreenLockTimeout activating keyguard"); mKeyguardMediator.doKeyguardTimeout(); mLockScreenTimerActive = false; } } }; 这里就回到KeyguardMediator那里了,doKeyguardTimeout()方法最终会调用到前面说的pokeWakelock方法。 |
相关文章推荐
- Android 按power键唤醒屏幕流程
- android 屏幕保持唤醒
- android 唤醒/解锁屏幕使用示例
- android学习笔记 按电源键屏幕唤醒和屏幕睡眠流程(从上层到kernel)
- Android 屏幕保持唤醒
- Android 物理按键在屏幕灭的时候会唤醒手机修改
- android唤醒屏幕/保持屏幕唤醒
- Andorid屏幕唤醒异常,Power按键无法点亮屏幕的分析
- Android power键亮屏流程
- Android唤醒屏幕并解锁
- Andorid屏幕唤醒异常,Power按键无法点亮屏幕的分析
- android 唤醒和点亮屏幕
- Android 系统7.0上 屏幕背光流程分析
- android2.2和2.3对于触摸屏幕唤醒屏幕的处理
- android 休眠唤醒流程及定位唤醒问题总结
- Android adb命令唤醒屏幕
- Android Keep screen on(保持屏幕唤醒)
- Android休眠唤醒驱动流程分析(一)
- Android唤醒屏幕
- android休眠与唤醒驱动流程分析