if("start-system-server".equals(argv[i])){
startSystemServer=true;
}elseif(argv[i].startsWith(ABI_LIST_ARG)){
abiList=argv[i].substring(ABI_LIST_ARG.length());
}elseif(argv[i].startsWith(SOCKET_NAME_ARG)){
socketName=argv[i].substring(SOCKET_NAME_ARG.length());
}else{
thrownewRuntimeException("Unknowncommandlineargument:
"+argv[i]);
}
}
.....
//预加载android依赖的文件
preload();
.....
if(startSystemServer){
//启动系统服务
startSystemServer(abiList,socketName);
}
.....
}catch(MethodAndArgsCallercaller){
caller.run();
}catch(Throwableex){
Log.e(TAG,"Zygotediedwithexception",ex);
closeServerSocket();
throwex;
}
}
看这个类的main方法,最上面根据传入的参数判断是否将startSystemServer这个标记设为true,接着预加载android依赖的文件,最后根据上面设置的标记来判断是否能启动系统服务。
接着看ZygoteInit.java中main方法在最后调用startSystemServer方法具体内容
privatestaticbooleanstartSystemServer(StringabiList,StringsocketName)
throwsMethodAndArgsCaller,RuntimeException{
.....
/*Hardcodedcommandlinetostartthesystemserver*/
Stringargs[]={
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1032,3001,3002,3003,3006,3007,3009,3010",
"--capabilities="+capabilities+","+capabilities,
"--nice-name=system_server",
"--runtime-args",
"com.android.server.SystemServer",
};
.....
try{
parsedArgs=newZygoteConnection.Arguments(args);
ZygoteConnection.applyDebuggerSystemProperty(parsedArgs);
ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs);
//Zygote进程开始fork子进程,启动SystemServer
/*Requesttoforkthesystemserverprocess*/
pid=Zygote.forkSystemServer(
parsedArgs.uid,parsedArgs.gid,
parsedArgs.gids,
parsedArgs.debugFlags,
null,
parsedArgs.permittedCapabilities,
parsedArgs.effectiveCapabilities);
}catch(IllegalArgumentExceptionex){
thrownewRuntimeException(ex);
}
.....
}
SystemServer.java代码
/frameworks/base/services/java/com/android/server/SystemServer.java
/**
*Themainentrypointfromzygote.
*/
publicstaticvoidmain(String[]args){
newSystemServer().run();
}
privatevoidrun(){
......
//Startservices.
try{
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER,"StartServices");
startBootstrapServices();
//启动核心Service
startCoreServices();
//启动其他Service
startOtherServices();
}catch(Throwableex){
Slog.e("System","******************************************");
Slog.e("System","************Failurestartingsystemservices",ex);
throwex;
}finally{
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
//Loopforever.
Looper.loop();
thrownewRuntimeException("Mainthreadloopunexpectedlyexited");
}
启动SystemServer.java的startOtherServices方法
/**
*Startsamiscellaneousgrabbagofstuffthathasyettoberefactored
*andorganized.
*/
privatevoidstartOtherServices(){
.....
//Wenowtelltheactivitymanageritisokaytorunthirdparty
//code.Itwillcallbackintousonceithasgottentothestate
//wherethirdpartycodecanreallyrun(butbeforeithasactually
//startedlaunchingtheinitialapplications),forustocompleteour
//initialization.
mActivityManagerService.systemReady(newRunnable(){
@Override
publicvoidrun(){
Slog.i(TAG,"Makingservicesready");
.....
}
}
.....
}
ActivityManagerService.java中的mStackSupervisor.resumeFocusedStackTopActivityLocked()
publicvoidsystemReady(finalRunnablegoingCallback){
.....
Slog.i(TAG,"Systemnowready");
EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_AMS_READY,
SystemClock.uptimeMillis());
.....
synchronized(this){
//Onlystartupencryption-awarepersistentapps;onceuseris
//unlockedwe'llcomebackaroundandstartunawareapps
startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);
.....
//调用ActivityStackSupervisor中的resumeFocusedStackTopActivityLocked方法
mStackSupervisor.resumeFocusedStackTopActivityLocked();
mUserController.sendUserSwitchBroadcastsLocked(-1,currentUserId);
}
}
ActivityStackSupervisor.java中的resumeFocusedStackTopActivityLocked方法
booleanresumeFocusedStackTopActivityLocked(){
returnresumeFocusedStackTopActivityLocked(null,null,null);
}
booleanresumeFocusedStackTopActivityLocked(
ActivityStacktargetStack,ActivityRecordtarget,ActivityOptionstargetOptions){
if(targetStack!
=ull&&isFocusedStack(targetStack)){
returntargetStack.resumeTopActivityUncheckedLocked(target,targetOptions);
}
finalActivityRecordr=mFocusedStack.topRunningActivityLocked();
if(r==null||r.state!
=RESUMED){
//调用ActivityStack中的resumeTopActivityUncheckedLocked来保证栈中的顶层Activity被重新启动
mFocusedStack.resumeTopActivityUncheckedLocked(null,null);
}
returnfalse;
}
ActivityStack.java中的resumeTopActivityUncheckedLocked方法
booleanresumeTopActivityUncheckedLocked(ActivityRecordprev,ActivityOptionsoptions){
....
booleanresult=false;
try{
//Protectagainstrecursion.
mStackSupervisor.inResumeTopActivity=true;
if(mService.mLockScreenShown==ActivityManagerService.LOCK_SCREEN_LEAVING){
mService.mLockScreenShown=ActivityManagerService.LOCK_SCREEN_HIDDEN;
mService.updateSleepIfNeededLocked();
}
result=resumeTopActivityInnerLocked(prev,options);
}finally{
mStackSupervisor.inResumeTopActivity=false;
}
returnresult;
}
privatebooleanresumeTopActivityInnerLocked(ActivityRecordprev,ActivityOptionsoptions){
if(DEBUG_LOCKSCREEN)mService.logLockScreen("");
if(!
mService.mBooting&&!
mService.mBooted){
//Notreadyyet!
returnfalse;
}
.....
if(next==null){
//Therearenomoreactivities!
finalStringreason="noMoreActivities";
finalintreturnTaskType=prevTask==null||!
prevTask.isOverHomeStack()
?
HOME_ACTIVITY_TYPE:
prevTask.getTaskToReturnTo();
if(!
mFullscreen&&adjustFocusToNextFocusableStackLocked(returnTaskType,reason)){
//Trytomovefocustothenextvisiblestackwitharunningactivityifthis
//stackisnotcoveringtheentirescreen.
returnmStackSupervisor.resumeFocusedStackTopActivityLocked(
mStackSupervisor.getFocusedStack(),prev,null);
}
//Let'sjuststartuptheL