Android 按power键唤醒屏幕流程

news/2024/11/17 3:34:22/

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方法。


http://www.ppmy.cn/news/692910.html

相关文章

TP 双击唤醒

折腾许久,终于调试出一个比较满意的版本,采用的许多方法跟上一篇不一样,在这里重新整理。 注册和上报键值这里就不在累赘了,本篇博客主要要解决以下bug: 1.系统进入睡眠状态后,如何通过tp唤醒系统。 2.如何…

双击唤醒的原理:

双击唤醒的原理: 说来也非常简单,事实上手机的显示屏和触摸屏实际上是两个单独工作的组件,只不过触摸屏是接近透明的,贴在显示屏上面用户看不出来。触摸屏识别手势信号,传输给处理器,显示屏只是负责显示相应的图像。传…

touch的双击唤醒如何实现

现在很多手机具有双击唤醒屏幕功能,那么这个功能是如何实现的呢,在ft5x06这款touchscreen上的实现方式如下 首先在touch的driver里会针对屏幕关闭时做特殊处理 在static irqreturn_t ftxxxx_ts_interrupt(int irq, void *dev_id) { u8 state; i…

GT9XX触摸屏双击唤醒功能分析

一、触摸屏唤醒方式 1.在屏幕上画其中26个字母中的一个来唤醒屏幕:例如:a/b/c/d…. 2. 在屏幕上画线唤醒屏幕:”上/下/左/右” 3.双击屏幕唤醒:在屏幕上双击两下。 二、触摸屏唤醒的原理 其实唤醒屏幕的原理很简单&#xff0…

android 双击点亮屏幕,手机双击点亮屏幕是怎么实现的

手机越来越智能,当然这取决于科技的进步与发展,使用安卓的用户可能注意到一个双击唤醒手机的功能,这个非常方便,本文就来介绍一下手机双击点亮屏幕是怎么回事,是如何实现的! 息屏操作的工作原理 息屏双击唤…

苹果手机数据恢复软件|易我iOS恢复大师免费下载

易我iOS恢复大师是一款非常强大的手机数据恢复软件。它能够恢复iphone|ios的照片、视频、通讯录、短信、通话记录、音乐等等手机数据。 适用于Windows和Mac的专业iPhone数据恢复软件。支持从iOS设备或iTunes/iCloud备份中恢复数据。支持最新的iOS 13和iPhone 11/11 Pro / XS / …

苹果手机微信记录恢复最简单的恢复方法

前言 手机中的微信使用的是SQLite数据库进行信息存储的,用户一旦误删除微信的聊天记录该怎么办呢?不用担心,由于SQLite数据库对于删除的记录并没有真正的删除,只是打上了删除标记的逻辑删除。我们可以借助一些工具实现微信删除记录…

能还原原始文件名的数据恢复软件

保留文件名的数据恢复的麻烦 「嘿,有谁能给我一个关于如何选择能保留原始文件名的数据恢复软件的建议吗?有多少人遇到过USB硬盘未格式化的案例?我最近碰到了这样一个麻烦,我的USB硬盘突然变成未格式化了,但是我没有对…