startActivityForResult()
----Instrumentation.execStartActivity
----mainThread.sendActivityResult
Instrumentation.exeStartActivity
----ActiveManagerNative.getDefault().StartActivity() ActiveManagerNative is a Binder and AMS as well
----checkStartActivityResult() This step is where "Unable to find explicit activity class" exception thrown
ASM.startActivity()
----startActivityAsUser()
----ActivityStack.resumeTopActivityLocked()
----ActivityStackSupervisor.startSpecificActivityLocked()
----realStartActivityLocked()
----app.thread.scheduleLaunchActivity app.thread is a IApplicationThread, which extends IInterface, so it is a binder, it defines a buntch of method that start/stop service/activity/receiver, such as scheduleLaunchActivity(), scheduleCreateService(); ActivityThread.ApplicationThread is an implementation of this method
ActivityThread.ApplicationThread.scheduleLaunchActivity()
----sendMessage(H.LAUNCH_ACTIVITY) just send a message to handler to start activity
The Handler.handleMessage() deal with LAUNCH_ACTIVITY; RELAUNCH_ACTIVITY; PAUSE_ACTIVITY...; and LAUNCH_ACTIVITY will call performLaunchActivity() method
performLaunchActivity() does following things:
1. getComponent infromation(ComponentName class)
2. Instrumentation.startActivity() will create activity instance by class loader:
activity = classLoader.loadclass(ClassName).newInstance()
3. Create application by LoadApk.makeApplication(), if the application hasn't been created
4. Create ContextImpl instance, and build the relationship with activity by activity.Attach()
5. Call Activity.onCreate()