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...