同一进程activity中启动另一个activity的流程

在上一篇文章launcher界面点击应用图标启动Activity流程分析 中我们分析了在新进程中启动activity的流程,这里我们也顺便介绍下在同一个进程的activity中启动另一个activity,这种场景在实际应用中应该更为常见。都是启动activity,这两种场景有什么区别呢?其实也没什么大的差别,主要是在新进程中启动activity时AMS要先创建一个新进程然后才在新进程中完成activity的启动,而在同一进程中启动activity就无需这一步–新的activity直接在原有进程中启动。

这里启动activity的主要流程分为三步:

第一步:launcher进程通知AMS自己想要启动一个应用的主activity,其中Launcher和AMS的通信使用了跨进程技术,流程图如下,其中ActivityManagerProxy是AMS的远程接口;

这里写图片描述

第二步:AMS收到启动activity的请求后会调整一下自身的状态(为后面启动新的activity做准备)并要求Launcher当前栈顶的activity进入pause状态,流程图如下,其中ApplicationThreadProxy是ApplicationThread的远程接口;

这里写图片描述

第三步:Launcher pause完当前栈顶activity后通知AMS可以开始启动新activity了,准备就绪后AMS会通过ApplicationThread的远程接口ApplicationThreadProxy来调用scheduleLaunchActivity通知新进程开始真正启动activity的工作了,activity的onCreate和onResume函数都是在ActivityThread的handleLaunchActivity中完成的;

这里写图片描述

至此,同一进程的activity中启动另一个activity的流程走完了。

详细的代码流程与launcher界面点击应用图标启动Activity流程分析 文中的大致一样,主要是在14步:ActivityStackSupervisor.startSpecificActivityLocked 中走的不一样,在同一个进程中启动activity时判断条件if (app != null && app.thread != null)将为true,从而直接走realStartActivityLocked函数而后会直接调用ApplicationThreadProxy.scheduleLaunchActivity通知应用进程完成activity的启动。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值