源码基于API 26
startActivity()上车
@Override
public void startActivity(Intent intent) {
this.startActivity(intent, null);
}
没什么好说的
//启动一个activity不需要返回值
//如果context之外调用startActivity(),需要给intent添加{@link Intent#FLAG_ACTIVITY_NEW_TASK}
//@param options 附加的选项指示如果启动activity
@Override
public void startActivity(Intent intent, @Nullable Bundle options) {
if (options != null) {
startActivityForResult(intent, -1, options);
} else {
//可重写该方法兼容应用需求
startActivityForResult(intent, -1);
}
}
可重写该方法,参考FragmentActivity
//If requestCode >= 0, this code will be returned in onActivityResult() when the activity exits.
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode) {
startActivityForResult(intent, requestCode, null);
}
最终执行该方法
//启动一个activity在finish()会返回一个结果在onActivityResult()中
//如果在onCreate()/onResume()方法中调用该方法,window不显示界面直到该方法返回结果
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode,
@Nullable Bundle options) {
//父activity一般为空
if (mParent == null) {
//通过ActivityOptions帮助类生成一个bundle,指示该如何启动该activity
options = transferSpringboardActivityOptions(options);
//Instrumentation基类启动Activity
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode, options);
//返回结果
if (ar != null) {
//最终会执行Activity的onActivityResult()
mMainThread.sendActivityResult(
mToken, mEmbeddedID, requestCode, ar.getResultCode(),
ar.getResultData());
}
if (requestCode >= 0)