android 5.1 keyguardhostview,Android8.0 Keyguard解鎖流程

概述

Keyguard鎖屏的加載可能和我們想象的不一樣,它是在滅屏的時候加載,這樣可以確保的屏幕亮起來的時候,用戶能第一時間看到鎖屏界面。滅屏存在多種方式,例如按power鍵、屏幕超時等,這些滅屏的方式雖然不一樣,但是殊途同歸,我們主要分析按power鍵時,Keyguard的加載流程。

時序圖

b71e0f22e19d655f255fdf5694ce163f.png

流程分析

按鍵事件的響應是在InputManagerService中,經過一系列的處理和轉換最終將會傳遞到PhoneWindowManager(PWM)的interceptKeyBeforeQueueing()來做具體的業務邏輯,這里我們不分析前面的過程,主要是從PWM開始分析。

Keyguard的加載從finishedGoingToSleep()開始,依次傳遞,期間還經過IPC過程調用IKeyguardService,最后傳到KeyguardViewMediator這里。KeyguardViewMediator這個類是解鎖屏模塊的中介者,以中介的身份處理keyguard狀態變化,處理event、power管理、PhoneWindowManager通知等請求,並作為回調對象供解鎖屏模塊的其它類回調。

繼續往前執行,通過Handler跨線程調用StatusBarKeyguardViewManager,再調用KeyguardBouncer的onScreenTurnedOff(),這里有一個判斷,如果此時是在Bouncer界面,那就會調用KeyguardHostView的onPause()方法去暫停,而在其他Bouncer不可見的界面,就不需要調用onPause()方法,顯然因為它都沒顯示所以不需要去Pause()。

d046f0372b200acf27f12e453b3964fb.png

往下又通過Handler去調用了KeyguardUpdateMoniter.handleFinishedGoingToSleep(),這里主要是去更新指紋解鎖的狀態,因為滅屏了如果有指紋的話就可以開始監聽指紋解鎖,就是在這里去開始監聽;值得一提的是,現如今的人臉解鎖也是在這個地方去更新狀態,所不同的是,人臉需要亮屏才開始監聽。

繼續往前執行,接下來就要處理Keyguard繪制的邏輯了,這部分主要是在StatusBarKeyguardViewManager中,首先會調用StatusBarWindowManager去更新當前的視圖,這個方法只要是手機屏幕視圖改變就會被調用,所以在Keyguard繪制完成后,還會調用一次。接着調用reset()去重置view的狀態,然后調用showBouncerOrKeyguard()方法去顯示notification keyguard還是bouncer,在滅屏的情況下,再次亮屏看到的一般是notification keyguard,就是有消息通知、時間之類的那個view,上滑才會顯示密碼解鎖界面,也就是bouncer。接着就會調用showKeyguard(),當然由於還沒有繪制內容,所以會進行keyguard的繪制。這里會調用hideBouncer()去隱藏已有的bouncer,因為下次亮屏的時候可能不是原來的鎖屏方式。例如原來是PIN解鎖,而我們在settings去重置了鎖屏為patten,那下次亮屏就應該顯示patten的view。

接下來就要繪制新的bouncer了,調用prepare(),往下執行到keyguardSecurityContainer的showSecurityScreen(),這里會根據當前的設置的安全模式,也就是鎖屏方式,去獲取相應的SecurityView,這里我們不研究各種鎖屏方式的view具體怎么繪制,只關心keyguard view的繪制,所以不往下深究。在獲取到新的securityview之后,調用onResume()方法,然后繪制到keyguard上。

965013dba32ff68aa8e08b48fe3b05fa.png

從時序圖上面可以看出來,這系列操作是串行的,所以在繪制完成之后,KeyguardViewMediator的handleShow()會調用KeyguardDisplayManager的show()方法,此時Keyguard就已經繪制完畢了,當然因為已經滅屏了,所以你並不能看到界面,當下次亮屏的時候,就會看到繪制好了的keyguard。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值