• 锁屏分析


    1.在SystemServer类的init2()方法中会启动线程类ServerThread的run方法:
      wm.systemReady();  //调用WindowManagerService的systemReady()方法。
    2..WindowManagerService.java

       mPolicy.systemReady();  //调用PhoneWindowManager .java中的systemReady方法。

       phoneWindowManager.java中:

        mKeyguardMediator.onSystemReady(); //进行待机锁屏及解锁逻辑 

    3. KeyguardViewMediator.java

         中的onSystemReady()方法中:

         doKeyguardLocked(); 

          中的showLocked()方法:

          mShowKeyguardWakeLock.acquire(); //确保屏幕处于唤醒状态 

          Message msg = mHandler.obtainMessage(SHOW); 

          mHandler.sendMessage(msg); 

        发送异步消息:

        执行handleShow();  方法。

        handleShow方法中调用:

        mKeyguardViewManager.show(); 

       在这个show方法中:

       mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this); 

       这个createKeyguardView方法是调用的LockPatternKeyguardViewProperties.java中createKeyguardView方法:

      c reateKeyguardView方法构建一个LockPatternKeyguardView();

    4.LockPatternKeyguardView();

        在这个构造方法中调用了keyguardScreenCallback()方法,

        调用updateScreen(getInitialMode(), false); //getInitialMode获取是锁屏还是解锁界面

        假如是解锁的话调用recreateUnlockScreen()方法,

        这个方法中    addView(mUnlockScreen);//将UnlockScreen添进LockPatternKeyguardView

        然后调用createUnlockScreenFor()方法,

        在这个方法中里判断解锁方式。

        其中的这个方法initializeBiometricUnlockView(unlockView);

        用来初始化人脸解锁,

       以上,LockScreen或者UnlockScreen就创建出来了,当然,只是创建了相应对象,还得再显示。

    5.再次回到KeyguardViewManager类的show方法,在执行完该方法中的      的mKeyguardView = mKeyguardViewProperties.createKeyguardView(mContext, mUpdateMonitor, this)代码流程后,接着执行mKeyguardView.show(),即调  用KeyguardViewBase的实现类LockPatternKeyguardView的show方法,如下:

      @Override斩龙www.wo-cn.com/zhanlong

        public void show() {

            // Emulate activity life-cycle for both lock and unlock screen.

            if (mLockScreen != null) {

                ((KeyguardScreen) mLockScreen).onResume();

            }

            if (mUnlockScreen != null) {

                ((KeyguardScreen) mUnlockScreen).onResume();

            }

            if (mBiometricUnlock != null && mSuppressBiometricUnlock) {

                mBiometricUnlock.hide();

            }

        }

  • 相关阅读:
    电脑页面放到手机显示时,遇到了一个奇怪的问题:字体的显示大小,与在CSS中指定的大小不一致
    Win 7 安装VMware Workstation Pro 14出现 “Intel VT-x禁用”问题以及“无法连接 MKS: 套接字连接尝试次数太多;正在放弃”问题的实质性解决
    linux下文件权限777了,file_put_contents()却不能写入,为什么?
    Linux常用命令版本CentOS7.x
    sqlserver阻塞
    深入理解sqlserver日志-01
    CentOS添加和删除用户
    root修改sudoers文件
    linux常用命令-持续更新
    CentOS虚拟机设置IP
  • 原文地址:https://www.cnblogs.com/jiangye/p/3337021.html
Copyright © 2020-2023  润新知