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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值