• Android 8.1 系统锁屏显示流程整理


    平台:
    RK3399 + Android 8.1
    1
    源码跟踪:
    系统启动时显示锁屏:
    |-- frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

    KeyguardServiceDelegate mKeyguardDelegate;
    
    /** {@inheritDoc} */
    @Override
    public void init(Context context, IWindowManager windowManager,
            WindowManagerFuncs windowManagerFuncs) {
    	...
        mKeyguardDelegate = new KeyguardServiceDelegate(mContext,
                new StateCallback() {
                    @Override
                    public void onTrustedChanged() {
                        mWindowManagerFuncs.notifyKeyguardTrustedChanged();
                    }
                });
    }
    
    /** {@inheritDoc} */
    @Override
    public void systemBooted() {
        bindKeyguard();
        ...
    }
    private void bindKeyguard() {
        synchronized (mLock) {
            if (mKeyguardBound) {
                return;
            }
            mKeyguardBound = true;
        }
        mKeyguardDelegate.bindService(mContext);
    }
    
    
    /** {@inheritDoc} */
    @Override
    public void systemReady() {//系统服务启动完成.
        // In normal flow, systemReady is called before other system services are ready.
        // So it is better not to bind keyguard here.
        mKeyguardDelegate.onSystemReady();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    所有的锁屏相关操作由mKeyguardDelegate 代理完成:
    |-- frameworks/base/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java

    public void bindService(Context context) {
    Intent intent = new Intent();
    final Resources resources = context.getApplicationContext().getResources();

       final ComponentName keyguardComponent = ComponentName.unflattenFromString(
               resources.getString(com.android.internal.R.string.config_keyguardComponent));
       intent.addFlags(Intent.FLAG_DEBUG_TRIAGED_MISSING);
       intent.setComponent(keyguardComponent);
    
       if (!context.bindServiceAsUser(intent, mKeyguardConnection,
               Context.BIND_AUTO_CREATE, mHandler, UserHandle.SYSTEM)) {
    ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    }

    private final ServiceConnection mKeyguardConnection = new ServiceConnection() {
       @Override
       public void onServiceConnected(ComponentName name, IBinder service) {
           if (DEBUG) Log.v(TAG, "*** Keyguard connected (yay!)");
           mKeyguardService = new KeyguardServiceWrapper(mContext,
                   IKeyguardService.Stub.asInterface(service), mCallback);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    }

    public void onS

  • 相关阅读:
    2.1.6.16 漏洞利用-rlogin最高权限登陆
    Java设计模式之外观模式
    [一篇读懂]C语言二讲:运算符与表达式
    飞睿智能6公里WiFi图传接收模块,低延迟、抗干扰、高速稳定传输数据,无人机、农田远距离WiFi模块
    【2022版】基于矩阵分解的PCA 白化&ZCA白化
    视频语音转文字工具用哪个好?推荐6款优质的视频转文字工具
    蓝桥杯成绩已出
    编程英语生词笔记本
    23种设计模式之代理模式
    如何一键核实验证身份证的真伪?
  • 原文地址:https://blog.csdn.net/baiyifei2016/article/details/126401531