同一进程activity中启动另一个activity的流程
2018-01-01 15:02
375 查看
在上一篇文章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的启动。
这里启动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的启动。
相关文章推荐
- android N进程启动流程(一)(捕获输入事件、准备创建activity、焦点切换)
- android N进程启动流程(二)(上一个activity的暂停、进程启动、绑定进程与创建application)
- android activity启动另一个进程的…
- 07 Activity启动另一个Activity 及 进程的信息查询
- Android 儿子Activity在启动过程中的流程组件 && 儿子Activity在一个新的进程组件启动过程
- [置顶] 源码阅读---Activity启动中应用进程的创建
- Android官方教程翻译(4)——启动另一个Activity
- Android系统进程Zygote启动流程
- Android ActivityManagerService 启动流程总结
- 深入理解Activity启动流程(二)–Activity启动相关类的类图
- 启动另一个activity
- Android应用程序在新的进程中启动新的Activity的方法和过程分析
- Activity启动流程
- Android系统启动流程(一)解析init进程启动过程
- Activity启动流程,界面绘制到事件处理的整个流程(基于Android6.0源码)(1)
- Activity启动流程(源码分析)
- 通过action 跨进程启动activity
- 转 Android应用程序在新的进程中启动新的Activity的方法和过程分析 .
- 在一个Activity bull中启动另一个Activity secondbull的方法 2 启动拨号器的方法
- System进程的启动流程第一部分