android startActivity函数调用步骤收集

还是复习下startActivity 的调用过程,总得来说,涉及的调用是非常多,不过我们只要清楚各类的角色,问题不大。涉及H,ActivityThread, ApplicationThread , ActivityManagerService(IActivityManager.Stub). ActivityStack等。其中ApplicationThread与ActivityManagerService 都是binder机制的组成部门,Stub,Proxy。 这里要注意的是ApplicationThread是app这边属于service的角色。 ActivityManagerService持有ApplicationThread的proxy,请求ApplicationThread.Stub执行自己的意志,最终一些Activity的创建(包括反射生成实例,创建上下文,按需创建application),各生命周期的调用,都是靠H传递消息,ActivityThread执行。ActivityManagerService这个则是APP这边充当client。 ActivityManagerService.Stub充当Service, app这边及时向他反馈信息,ActivityManagerService.Stub统筹调度,管理Activity.以后就是粗略的方法调用过程。特别注意在Activity需要打开新进程的时候,zygote进程创建,ActivityThread main方法的反射调用。

Activity.startActivity(Intent intent)

Activity.startActivity(Intent intent, @Nullable Bundle options)

Activity.startActivityForResult(@RequiresPermission Intent intent, int requestCode,@Nullable Bundle options)

Instrumentation.execStartActivity(Context who, IBinder contextThread, IBinder token, Activity target,Intent intent, int requestCode, Bundle options)

ActivityManager.getService().startActivity(IApplicationThread var1, String var2, Intent var3, String var4, IBinder var5, String var6, int var7, int var8, ProfilerInfo var9, Bundle var10)

IActivityManager.Stub.Proxy.startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags, ProfilerInfo profilerInfo, Bundle options)

ActivityManagerService.startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions)

ActivityManagerService.startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId)

ActivityStarter.startActivityMayWait(IApplicationThread caller, int callingUid,String callingPackage, Intent intent, String resolvedType,IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, WaitResult outResult, Configuration globalConfig, Bundle bOptions, boolean ignoreTargetSecurity, int userId,TaskRecord inTask, String reason)

ActivityStarter.startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent, String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo,IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,String callingPackage, int realCallingPid, int realCallingUid, int startFlags,ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,ActivityRecord[] outActivity, TaskRecord inTask, String reason)

ActivityStarter.startActivity(IApplicationThread caller, Intent intent, Intent ephemeralIntent, String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,String callingPackage, int realCallingPid, int realCallingUid, int startFlags,ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,ActivityRecord[] outActivity, TaskRecord inTask)

ActivityStarter.startActivity(final ActivityRecord r, ActivityRecord sourceRecord,IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,int startFlags, boolean doResume, ActivityOptions options, TaskRecord inTask,ActivityRecord[] outActivity)

ActivityStarter.startActivityUnchecked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,int startFlags, boolean doResume, ActivityOptions options, TaskRecord inTask,ActivityRecord[] outActivity)

ActivityStack.startActivityLocked(ActivityRecord r, ActivityRecord focusedTopActivity,boolean newTask, boolean keepCurTransition, ActivityOptions options)

ActivityStack.resumeTopActivityUncheckedLocked(ActivityRecord prev, ActivityOptions options)

ActivityStack.resumeTopActivityInnerLocked(ActivityRecord prev, ActivityOptions options)

ActivityStack.startPausingLocked(boolean userLeaving, boolean uiSleeping, ActivityRecord resuming, boolean pauseImmediately)

IApplicationThread.Stub.Proxy.schedulePauseActivity(IBinder token, boolean finished, boolean userLeaving, int configChanges, boolean dontReport)

ApplicationThread.schedulePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges, boolean dontReport)

H.sendMessage(int what, Object obj, int arg1, int arg2, int seq)

ActivityThread.handlePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges, boolean dontReport, int seq)

ActivityThread. performPauseActivity(token, finished, r.isPreHoneycomb(), “handlePauseActivity”);

ActivityManager.getService().activityPaused(token);

ActivityManagerService.activityPaused(IBinder token)

ActivityStack.activityPausedLocked(IBinder token, boolean timeout)

ActivityStackSupervisor.startSpecificActivityLocked(ActivityRecord r, boolean andResume, boolean checkConfig)

ActivityManagerService.startProcessLocked(ProcessRecord app, String hostingType,String hostingNameStr, String abiOverride, String entryPoint, String[] entryPointArgs)

Process.start(final String processClass,final String niceName,int uid, int gid, int[] gids, int debugFlags, int mountExternal,int targetSdkVersion,String seInfo,String abi,String instructionSet,String appDataDir,String invokeWith,String[] zygoteArgs)

ZygoteProcess.start(final String processClass,final String niceName, int uid, int gid, int[] gids, int debugFlags, int mountExternal,int targetSdkVersion,String seInfo,String abi,String instructionSet,String appDataDir,String invokeWith,String[] zygoteArgs)

ZygoteProcess.startViaZygote(final String processClass, final String niceName,final int uid, final int gid, final int[] gids, int debugFlags, int mountExternal,int targetSdkVersion,String seInfo,String abi,String instructionSet,String appDataDir, String invokeWith, String[] extraArgs)

ZygoteProcess.zygoteSendArgsAndGetResult(ZygoteState zygoteState, ArrayList args)

ActivityStackSupervisor.realStartActivityLocked(ActivityRecord r, ProcessRecord app, boolean andResume, boolean checkConfig)

ApplicationThread.scheduleLaunchActivity(Intent intent, IBinder token, int ident, ActivityInfo info, Configuration curConfig, Configuration overrideConfig, CompatibilityInfo compatInfo, String referrer, IVoiceInteractor voiceInteractor, int procState, Bundle state, PersistableBundle persistentState,List pendingResults, List pendingNewIntents,boolean notResumed, boolean isForward, ProfilerInfo profilerInfo)

ActivityThread.handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason)

ActivityThread.performLaunchActivity(ActivityClientRecord r, Intent customIntent)

Insrumentation.callActivityOnCreate(Activity activity, Bundle icicle,
PersistableBundle persistentState)

Activity.performCreate(Bundle icicle, PersistableBundle persistentState)

Activity.onCreate(@Nullable Bundle savedInstanceState,
@Nullable PersistableBundle persistentState)

猜你喜欢

转载自blog.csdn.net/atxxiang4/article/details/85335717