Android 解鎖屏啟動過程

來源:互聯網
上載者:User
  1. 開機啟動

        在開機過程中無線模組初始化時擷取SIM卡,狀態。在初始化完成後調用vm.systemReady()函數通知進入相應的LockScreen進行解鎖。

  1. 在hardware/ril/reference-ril/reference-ril.c中:

        通過 setRadioState(RADIO_STATE_SIM_NOT_READY) 來觸發對無線模組的初始化。

        通過 staticvoid onRadioPowerOn() 對無線模組初始化。

        首先通過pollSIMState(Null):輪詢sim卡狀態。

        由getSIMStatus()函數擷取sim卡狀態。

       2.當系統初始化完成後 會調用wm.systemReady()函數,觸發解鎖介面。

VM:WindowManagerServicewm = null;

由於WM為空白,調用WindowManagerService中函數:

publicvoid systemReady () {

mPolicy.systemReady();

}

mPolicy:final WindowManagerPolicy mPolicy =PolicyManager.makeNewWindowManager();

(以下檔案在frameworks/policies/base/phone/com/android/internal/policy/impl中)

3.PolicyManager.makeNewWindowManager(),調用檔案PolicyManagerer.java中函數:

publicstatic WindowManagerPolicy makeNewWindowManager() {

  returnsPolicy.makeNewWindowManager();

}

4.sPolicy.makeNewWindowManager 調用的是檔案Policy.java中函數:

publicPhoneWindowManager makeNewWindowManager() {

returnnew PhoneWindowManagerwv

}

5.PhoneWindowManager 繼承自 WindowManagerPolicy

  mPolicy.systemReady()最終調用的是檔案 PhoneWindowManager.java中的函數:

  publicvoid systemReady();

  mKeyguardMediator.onSystemReady();

  doKeyguard();

  showLocked();

Messagemsg = mHandler.obtainMessage(Show);

mHandler.sendMessage(msg);

發送SHOW訊息。

6.public void handleMessage(Message msg) 對 SHOW訊息進行了處理。

  如果 msg.what等於 SHOW 那麼執行:

  handleShow();

  privatevoid handleShow()

  ...

mCallback.onKeyguardShow();

mKeyguardViewManag.show()

7.mKeyguardViewManager.show() 調用的是檔案KeyguardViewManager.java 中的函數:

publicsynchronized void show()

  ...

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

 ...

8.mKeyguardViewProperties.createKeyguardView

調用的是檔案LockPatternKeyguardViewProperties.java中的函數:

 publicKeyguardViewBase createKeyguardView(Context context,

  KeyguardUpdateMonitorupdateMonitor,

  KeyguardWindowControllercontroller) {

  returnnew LockPatternKeyguardView(context, updateMonitor,

mLockPatternUtils,controller);

}

9. new LockPatternKeyguardView 調用了類LockPatternKeyguardView 的建構函式:

  publicLockPatternKeyguardView(

  Contextcontext,

  KeyguardUpdateMonitorupdateMonitor,

  LockPatternUtilslockPatternUtils,

  KeyguardWindowControllercontroller)

  ...

  mLockScreen= createLockScreen();

  addView(mLockScreen);

  finalUnlockMode unlockMode = getUnlockMode();

  mUnlockScreen= createUnlockScreenFor(unlockMode);

mUnlockScreenMode=unlockMode;

addView(mUnlockScreen);

updateScreen(mMode);

其中getUnlockMode獲得鎖類型,通常有三種:

  enumUnlockMode {

  Pattern,

  SinPIN,

Account

}

createUnlockScreenFor(unlockMode)根據相應的unlockMode而調用對應的解鎖屏。

  1. 按紅鍵啟動

點擊結束通話鍵(紅鍵),根據action:

TelephonyManager.ACTION_PHONE_STATE_CHANGE和TelephonyManager.EXTRA_STATE_IDLE

調用frameworks/policies/base/phone/com/android/internal/policy/impl/

KeyguardViewMediator.java中函數:

doKeyguard();

privatevoid showLocked() {

if(DEBUG) Log.d(TAG, "showLocked");

//ensure we stay awake until we are finished displaying the keyguard

mShowKeyguardWakeLock.acquire();

Messagemsg = mHandler.obtainMessage(SHOW);

mHandler.sendMessage(msg);

}

發送SHOW訊息。

之後轉到“開機啟動”的第六步。

  1. 其它方式

  1. SIM卡狀態改變,當sim卡狀態為ABSENT

//only force lock screen in case of missing sim if user hasn't gonethrough setup wizard

當sim卡狀態為PUK_REQUIRED :即輸入PIN失敗。(調用PUK解鎖屏)

  1. 設定的自動鎖屏時間out

都是通過KeyguardViewMediator.java啟動。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.