工作流程
AMS的工作流程,其实就是Activity的启动和调度的过程,所有的启动方式,最终都是通过Binder机制的Client端,调用Server端的AMS的startActivityXXX()系列方法。所以可见,工作流程又包括Client端和Server端两个。
Client端流程
- Launcher主线程捕获
onClick()点击事件后,调用Launcher.startActivitySafely()方法。Launcher.startActivitySafely()内部调用了Launcher.startActivity()方法,Launcher.startActivity()内部调用了Launcher的父类Activity的startActivity()方法。 Activity.startActivity()调用Activity.startActivityForResult()方法,传入该方法的requestCode参数若为-1,则表示Activity启动成功后,不需要执行Launcher.onActivityResult()方法处理返回结果。- 启动Activity需要与系统ActivityManagerService交互,必须纳入Instrumentation的监控,因此需要将启动请求转交instrumentation,即调用
Instrumentation.execStartActivity()方法。 Instrumentation.execStartActivity()首先通过ActivityMonitor检查启动请求,然后调用ActivityManagerNative.getDefault()得到ActivityManagerProxy代理对象,进而调用该代理对象的startActivity()方法。- ActivityManagerProxy是ActivityManagerService的代理对象,因此其内部存储的是BinderProxy,调用
ActivityManagerProxy.startActivity()实质是调用BinderProxy.transact()向Binder驱动发送START_ACTIVITY_TRANSACTION命令。Binder驱动将处理逻辑从Launcher所在进程切换到ActivityManagerService所在进程。
作者:thinkChao
链接:https://www.jianshu.com/p/47eca41428d6
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文深入解析了Android系统中Activity的启动和调度过程,即AMS(Activity Manager Service)的工作流程。详细介绍了从Launcher捕获点击事件到启动Activity的全过程,包括Client端和Server端的交互细节。
5867

被折叠的 条评论
为什么被折叠?



