android开机锁屏流程分析

开机锁屏流程:

首先: 手机开机时,在SystemServer类的init2()方法中会启动线程类ServerThreadrun方法如下

    WindowManagerService wm = null;      ...  

      try     {  

               wm.systemReady();  //调用WindowManagerServicesystemReady()方法。

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.javacreateKeyguardView方法:

  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的实现类LockPatternKeyguardViewshow方法,如下:

  @Override

    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();

        }

    }

开机锁屏的大致流程就是这样了。

你可能感兴趣的:(android源码解析)