啟動(dòng)activity:
**android.process.acore進(jìn)程
1.Acticity.startActivityForResult()
2.Instrumention.execStartActivity();
3.ActivityManagerNative.getDefault()
.startActivity()
3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的實(shí)例,
它只是一個(gè)代理類(lèi),這個(gè)代理類(lèi)實(shí)際上代理的是IBinder b = ServiceManager.getService("activity");
這個(gè)Service。
3.2 這個(gè)Service是什么時(shí)候添加進(jìn)來(lái)的呢?
在SystemServer.java的run()中有調(diào)用
ActivityManagerService.setSystemProcess();
ServiceManager.addService("activity", m);
這里還會(huì)添加許多系統(tǒng)關(guān)鍵服務(wù)。
(TODO:查看在SystemServer的Log輸出)
**system_process進(jìn)程
4 ActivityManagerNative
|--ActivityManagerService
在ActivityManagerNative的onTransact方法中最終提供了服務(wù):
case START_ACTIVITY_TRANSACTION:
ActivityManagerService.startActivity();
--startActivityLocked(IApplicationThread caller,
Intent intent, String resolvedType,
Uri[] grantedUriPermissions,
int grantedMode, ActivityInfo aInfo, IBinder resultTo,
String resultWho, int requestCode,
int callingPid, int callingUid, boolean onlyIfNeeded,
boolean componentSpecified)
--startActivityUncheckedLocked(r, sourceRecord,
grantedUriPermissions, grantedMode, onlyIfNeeded, true)
在這個(gè)方法里面檢查權(quán)限,解析intent中的Flag。。。
--startActivityLocked(HistoryRecord r, boolean newTask)
--resumeTopActivityLocked(HistoryRecord prev)
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--startProcessLocked(String processName,ApplicationInfo info, boolean knownToBeDead, int intentFlags,String hostingType, ComponentName hostingName)
--startProcessLocked(ProcessRecord app,String hostingType, String hostingNameStr)
在這里啟動(dòng)一個(gè)進(jìn)程用來(lái)host這個(gè)應(yīng)用
int pid = Process.start("android.app.ActivityThread",
mSimpleProcessManagement ? app.processName : null, uid, uid,
gids, debugFlags, null);
ActivityManagerService.java
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--realStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)
--app.thread.scheduleLaunchActivity //scheduleLaunchActivity()@IApplicationThread.java
--scheduleLaunchActivity()@ActivityThread.java //這里實(shí)際是ApplicationThreadNative提供的服務(wù)
--handleMessage()@H$ActivityThread.java
--handleLaunchActivity()@ActivityThread.java
--Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java //這時(shí)真正的Activity對(duì)象被構(gòu)造出來(lái)
--mInstrumentation.newActivity() //通過(guò)反射構(gòu)造出Activity對(duì)象
--activity.attach() //初始化Activity,生成一個(gè)window對(duì)象,設(shè)置各種狀態(tài)等等
--mInstrumentation.callActivityOnCreate(activity, r.state); //調(diào)用Activity的onCreate()方法
到這里,我們自己寫(xiě)的activity的onCreate()方法已經(jīng)被系統(tǒng)調(diào)用了,接下來(lái)依次回調(diào)生命周期方法:
--activity.performStart();
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
--mInstrumentation.callActivityOnPostCreate(activity, r.state);
--mActivities.put(r.token, r); //將這個(gè)activity入棧
然后就要調(diào)用onResume()方法了:
--handleResumeActivity(IBinder token, boolean clearHide, boolean isForward)
--performResumeActivity(token, clearHide);
--r.activity.performResume();
--performRestart()@Activity.java;
--mInstrumentation.callActivityOnRestart(this);
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnResume(this);
onResume()已經(jīng)調(diào)用完畢,一個(gè)activity的邏輯處理結(jié)束了,但是這時(shí)候屏幕上還不會(huì)顯示任何東西,因?yàn)閂iew還沒(méi)有添加進(jìn)去
--r.window.getDecorView(); //開(kāi)始把DecorView添加進(jìn)Window
--wm.addView(decor, l);
至此一個(gè)Activity啟動(dòng)結(jié)束。