日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Android 解锁屏启动过程

發(fā)布時(shí)間:2025/4/5 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 解锁屏启动过程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android 解鎖屏啟動(dòng)過程
一. 開機(jī)啟動(dòng)
在開機(jī)過程中無線模塊初始化時(shí)獲取SIM卡,狀態(tài)。在初始化完成后調(diào)用vm.systemReady()函數(shù)通知進(jìn)入相應(yīng)的Lock Screen進(jìn)行解鎖。

1. 在hardware/ril/reference-ril/reference-ril.c中:
通過 setRadioState (RADIO_STATE_SIM_NOT_READY) 來觸發(fā)對無線模塊的初始化。
通過 static void onRadioPowerOn() 對無線模塊初始化。
首先通過pollSIMState(Null):輪詢sim卡狀態(tài)。
由getSIMStatus()函數(shù)獲取sim卡狀態(tài)。

2. 當(dāng)系統(tǒng)初始化完成后 會(huì)調(diào)用wm.systemReady()函數(shù),觸發(fā)解鎖界面。
VM:WindowManagerService wm = null;
由于WM為空,調(diào)用WindowManagerService中函數(shù):
public void systemReady () {
mPolicy.systemReady();
}
mPolicy: final WindowManagerPolicy mPolicy = PolicyManager.makeNewWindowManager();

(以下文件在frameworks/policies/base/phone/com/android/internal/policy/impl中)
3. PolicyManager.makeNewWindowManager(),調(diào)用文件 PolicyManagerer.java中函數(shù):
public static WindowManagerPolicy makeNewWindowManager() {
  return sPolicy.makeNewWindowManager();
}

4. sPolicy.makeNewWindowManager 調(diào)用的是文件 Policy.java中函數(shù):
public PhoneWindowManager makeNewWindowManager() {
return new PhoneWindowManagerwv
}

5. PhoneWindowManager 繼承自 WindowManagerPolicy
  mPolicy.systemReady() 最終調(diào)用的是文件 PhoneWindowManager.java 中的函數(shù):
  public void systemReady();
  mKeyguardMediator.onSystemReady();
  doKeyguard();
  showLocked();
Message msg = mHandler.obtainMessage(Show);
mHandler.sendMessage(msg);
發(fā)送SHOW消息。

6. public void handleMessage(Message msg) 對 SHOW 消息進(jìn)行了處理。
  如果 msg.what 等于 SHOW 那么執(zhí)行:
  handleShow();
  private void handleShow()
  ...
mCallback.onKeyguardShow();
mKeyguardViewManag.show()
7. mKeyguardViewManager.show() 調(diào)用的是文件 KeyguardViewManager.java 中的函數(shù):
public synchronized void show()
  ...
mKeyguardView = mKeyguardViewProperties.createKeyguardView( mContext, mUpdateMonitor, this);
 ...

8. mKeyguardViewProperties.createKeyguardView
調(diào)用的是文件 LockPatternKeyguardViewProperties.java中的函數(shù):
 public KeyguardViewBase createKeyguardView(Context context,
  KeyguardUpdateMonitor updateMonitor,
  KeyguardWindowController controller) {
  return new LockPatternKeyguardView(context, updateMonitor,
mLockPatternUtils, controller);
}

9.? new LockPatternKeyguardView 調(diào)用了類 LockPatternKeyguardView 的構(gòu)造函數(shù):
  public LockPatternKeyguardView(
  Context context,
  KeyguardUpdateMonitor updateMonitor,
  LockPatternUtils lockPatternUtils,
  KeyguardWindowController controller)
  ...
  mLockScreen = createLockScreen();
  addView(mLockScreen);
  final UnlockMode unlockMode = getUnlockMode();
  mUnlockScreen = createUnlockScreenFor(unlockMode);
mUnlockScreenMode =unlockMode;
addView(mUnlockScreen);
updateScreen(mMode);

其中g(shù)etUnlockMode 獲得鎖類型,通常有三種:
  enum UnlockMode {
  Pattern,
  SinPIN,
Account
}
createUnlockScreenFor(unlockMode)根據(jù)相應(yīng)的unlockMode而調(diào)用對應(yīng)的解鎖屏。

二. 按紅鍵啟動(dòng)
點(diǎn)擊結(jié)束通話鍵(紅鍵),根據(jù)action:
TelephonyManager.ACTION_PHONE_STATE_CHANGE和TelephonyManager.EXTRA_STATE_IDLE
調(diào)用frameworks/policies/base/phone/com/android/internal/policy/impl/
KeyguardViewMediator.java中函數(shù):
doKeyguard();
private void showLocked() {
??????? if (DEBUG) Log.d(TAG, "showLocked");
??????? // ensure we stay awake until we are finished displaying the keyguard
??????? mShowKeyguardWakeLock.acquire();
??????? Message msg = mHandler.obtainMessage(SHOW);
??????? mHandler.sendMessage(msg);
}
發(fā)送SHOW消息。
之后轉(zhuǎn)到“開機(jī)啟動(dòng)”的第六步。
三. 其它方式
1. SIM卡狀態(tài)改變,當(dāng)sim卡狀態(tài)為ABSENT
// only force lock screen in case of missing sim if user hasn't gone through setup wizard
當(dāng)sim卡狀態(tài)為 PUK_REQUIRED :即輸入PIN失敗。(調(diào)用PUK解鎖屏)

2. 設(shè)置的自動(dòng)鎖屏?xí)r間out
都是通過KeyguardViewMediator.java啟動(dòng)。

總結(jié)

以上是生活随笔為你收集整理的Android 解锁屏启动过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。