mStartedActivity = true;
}
…
} else {
…
}
…
}
2.3 execStartActivity()
继续进入Instrumentation
类,看看execStartActivity
方法:
//Instrumentation类
public ActivityResult execStartActivity(
Context who, IBinder contextThread, IBinder token, Activity target,
Intent intent, int requestCode, Bundle options) {
IApplicationThread whoThread = (IApplicationThread) contextThread;
if (mActivityMonitors != null) {
synchronized (mSync) {
final int N = mActivityMonitors.size();
for (int i=0; i<N; i++) {
final ActivityMonitor am = mActivityMonitors.get(i);
if (am.match(who, null, intent)) {
am.mHits++;
if (am.isBlocking()) {
return requestCode >= 0 ? am.getResult() : null;
}
break;
}
}
}
}
try {
intent.migrateExtraStreamToClipData();
intent.prepareToLeaveProcess();
//交给ActivityManagerNative来startActivity
int result = ActivityManagerNative.getDefault()
.startActivity(whoThread, who.getBasePackageName(), intent,
intent.resolveTypeIfNeeded(who.getContentResolver()),
token, target != null ? target.mEmbeddedID : null,
requestCode, 0, null, options);
//检查启动Activity的结果
checkStartActivityResult(result, intent);
} catch (RemoteException e) {
}
return null;
}
上面的代码可以看出,启动Activity真正的实现交给了ActivityManagerNative.getDefault()的startActivity方法来完成。然后启动之后通过checkStartActivityResult(result, intent);来检查Activity的启动结果(比如Activity没有在AndroidManifest.xml中注册就throw ActivityNotFoundExce