App启动流程详解

启动一个app的流程:

1、Launcher中开启一个app —>

2、Activity.startActivityForResult —>

3、整个进程只会存在一个Instrumentation对象,每个Activity都会持有Instrumentation对象的引用,mInstrumentation.execStartActivity() —>

4、ActivityManagerNative.getDefault() —>

5、返回一个ActivityManagerProxy对象, ActivityManagerProxy.startActivity(),这个方法里面做的事情就是IPC通信,利用Binder对象,调动transact(),把所有需要的参数封装成Parcel对象,向AMS发送数据进行通信。—>

6、ActivityManagerService.startActivity() —>

7、ActivityManagerService.startActivityAsUser() —>

8、出现一个新对象ActivityStackSupervisor,通过这个类实现对ActivityStack的部分操作,ActivityStackSupervisor.startActivityMayWait() —>

9、startActivityLocked() —>

10、调用startActivityUncheckedLocked(),此时要启动的Activity已经通过校验,被认为是一个正当的启动请求。—>

11、终于在这里调用了ActivityStack 的 startActivityLocked(ActivityRecord r,
boolean newTask,boolean doResume, boolean keepCurTransition,
Bundle options)。
ActivityRecord 代表的就是要开启的 Activity 对象,里面分装了很多信息,比
如所在的 ActivityTask 等,如果这是首次打开应用,那么这个 Activity 会被放
到 ActivityTask 的栈顶,—>

12、mStackSupervisor.resumeTopActivitiesLocked —>

13、ActivityStack .resumeTopActivityInnerLocked —>

14、startPausingLocked() —>

15、prev.app.thread.schedulePauseActivity(),到Lancher进程暂停指定Activity —>

16、ActivityThread.handlePauseActivity() —>

17、ActivityThread.performPauseActivity(),暂停指定Activity —>

18、接着通过Bindler通信,通知AMS已经完成暂停的操作
ActivityManagerNative.getDefault().activityPaused(token)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值