Activity启动流程

Launcher进程请求AMS

点击图标是发生在Launcher应用进程,实际上执行的LauncheronClick方法,在onClick里面会执行到ActivitystartActivity方法。startActivity会调用mInstrumentation.execStartActivity(),execStartActivity通过ActivityManagergetService方法来得到AMS的代理对象。

Launcher进程作为客户端与服务端AMS不在同一个进程,ActivityManager.getService返回的是IActivityManager.Stub代理对象,此时如果要实现客户端与服务端进程间的通信, 需要AMS继承IActivityManager.Stub类并实现相应的方法,这样Launcher进程作为客户端就拥有了服务端AMS的代理对象,然后就可以调用AMS的方法来实现具体功能了。

AMS发送创建应用进程请求,Zygote进程接受请求并fork应用进程

①AMS通过socket通信告知Zygote进程fork子进程。

②应用进程启动ActivityThread,执行ActivityThreadmain方法。

③main方法创建ApplicationThreadLooperHandler 对象,并开启主线程消息循环Looper.loop()

App进程通过Binder向AMS(sytem_server)发起attachApplication请求,AMS绑定ApplicationThread

ActivityThreadmain中,通过ApplicationThread.attach(false, startSeq),AMS绑定ApplicationThread对象,这样AMS就可以通过这个代理对象来控制应用进程。

AMS发送启动Activity的请求

system_server进程在收到请求后,进行一系列准备工作后,再通过binder向App进程发送scheduleLaunchActivity请求,AMS将启动Activity的请求发送给ActivityThreadHandler

ActivityThread的Handler处理启动Activity的请求

App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息,主线程在收到Message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法。 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值