当我们调用startActivity(intent)的时候,内部走的是startActivityforResult(参数)。startActivityForResult(intent, -1
, options);-1表示requestCode为-1.不用返回结果。该方法内部重点是
- Instrumentation.ActivityResult ar =
- mInstrumentation.execStartActivity(
- this, mMainThread.getApplicationThread(), mToken, this,
- intent, requestCode, options);
- 真正打开activity的实现在Instrumentation的execStartActivity方法。execStartActivity有几个重载的函数。真正实现它的是里面的
- IApplicationThread whoThread = (IApplicationThread) contextThread;
-
- int result = ActivityManagerNative.getDefault()
- .startActivity(whoThread, who.getBasePackageName(), intent,
- intent.resolveTypeIfNeeded(who.getContentResolver()),
- token, target != null ? target.mEmbeddedID : null,
- requestCode, 0, null, null, options);
- //这个方法是专门抛异常的,它会对结果进行检查,如果无法打开activity,
- //则抛出诸如ActivityNotFoundException类似的各种异常
- checkStartActivityResult(result, intent);
- 标红的是重点。IApplicationThread 是由ActivityThread实现的。