AMS的啟動過程

2021-10-17 15:53:24 字數 3372 閱讀 9833

我們先分析ams在**systemservice main函式** 中的啟動過程

[1] ams是在systemserver程序中啟動的主要入口

//zygote孵化的主要入口

public

static

void

main

(string[

] args)

[2] 我們來看一下在run函式中的工作

private

void

run(

)finally

// start services.

trycatch

(throwable ex)

finally..

.}

[3] 接下來我們去startbootstrapservices函式中看看ams啟動流程

private

void

startbootstrapservices()

[4] 可以看到 此處呼叫了**startservice函式方法,以activitymanagerservice.lifecycle.class**作為引數進行傳遞

public

systemservice

> t startservice

(class

serviceclass)

final t service;

try...

//調取startservice多型

startservice

(service)

;return service;

}finally

}public

void

startservice

(@nonnull

final systemservice service)

catch

(runtimeexception ex)

warniftoolong

(systemclock.

elapsedrealtime()

- time, service,

"onstart");

}

下面我們進入**activityservicemanager類**中的看看ams是如何執行啟動操作的

systemservice啟動ams時我們以**activitymanagerservice.lifecycle.class**作為引數進行傳遞的,我們知曉lifecycle類activitymanagerservice的內部類

public

static

final

class

lifecycle

extends

systemservice

@override

public

void

onstart()

@override

public

void

oncleanupuser

(int userid)

//獲取ams服務

public activitymanagerservice getservice()

}

[2] 建立ams例項

public

activitymanagerservice

(context systemcontext)

while

(true)if

(nextcpudelay >0)

}}catch

(interruptedexception e)

updatecpustatsnow()

;//更新cup狀態

}catch

(exception e)}}

};watchdog.

getinstance()

.addmonitor

(this);

watchdog.

getinstance()

.addthread

(mhandler)

;}

[3] 啟動ams

private

void

start()

catch

(interruptedexception e)

}

[4]向servicemanger中註冊binder服務mactivitymanagerservice.setsystemprocess()

public

void

setsystemprocess()

//註冊許可權控制binder

servicemanager.

addservice

("permission"

,new

permissioncontroller

(this))

;//註冊程序管理binder

servicemanager.

addservice

("processinfo"

,new

processinfoservice

(this))

;

getpackagemanager()

.("android"

, stock_pm_flags | match_system_only)

; msystemthread.

(info,

getclass()

.getclassloader()

);synchronized

(this

)updatelruprocesslocked

false

, null)

;updateoomadjlocked()

;}}catch

(packagemanager.namenotfoundexception e)

}

至此 ams及相關的binder和服務 註冊完成!

mysql啟動過程長 mysql啟動過程

mysql啟動過程經過以下順序 1.mysql讀取配置檔案的順序 讀取順序 etc my.cnf etc mysql my.cnf usr etc my.cnf my.cnf 2.mysql啟動方式 mysql啟動方式有三種 mysqld mysqld safe mysqld multi 主要用於多...

Linux啟動過程

1 開啟 pc電源 pc加電後,乙個特殊的硬體電路會觸發 cpu 的 reset 腳的邏輯值,然後一些 cpu 暫存器,如 cs eip 等被給定乙個值,接著 cpu 跳轉到乙個固定位址開始執行 bios 2 bios 自檢,按設定的裝置啟動 bios 對硬體進行一系列徹底的檢查,如 cpu 型別 ...

Flex 啟動過程

2008 11 16 11 58 然後才是 通常我們所說的flex應用程式,本質上來說是基於flex框架 採用actionscript 3.0編寫的flash應用程式,從這一點來說,它和普通的flash應用程式沒有任何差別。相對來說,傳統的使用flash ide 如flash cs3 建立flash...