1.Activity的生命周期回调
2.冷启动大致流程,涉及哪些组件,这些组件的通信过程是怎样的?
3.Activity启动过程中,生命周期回调的原理?
startActivity属于启动应用组件,所以要和AMS通信,请求的数据会封装到一个data的Parcel里写到binder驱动,在AMS的onTransact回调里根据请求码和数据去在startSpecificActivityLocked函数里去处理。这里在之前的文章里也讲过。
startActivity是AMS里的一个函数,里面处理的逻辑是在startSpecificActivityLocked中执行的
realStartActivityLocked函数是真正启动Activity的函数
entryPoint是应用进程启动之后的入口函数的Java类,Process.start函数会带着这个参数向Zygote发送请求启动应用进程,进程启动完后返回的pid就放在Process.ProcessStartResut这个数据结构里,下面代码发送的消息是说应用启动之后如果10秒之内没有向AMS报告,AMS就会清理应用相关的所有信息(准备启动的应用组件)
openZygoteSocketIfNeeded(abi)是打开通往Zygote的Socket,通过Socket发送启动进程的参数然后读取返回的结果。
attach函数就是应用向AMS发送报告,AMS的实现如下图:
先根据pid去查到ProcessRecord的Map里去查,查出来之后则去执行应用端注册到AMS的binder对象的bindApplication函数,去初始化(比如创建Application等)
mStackSupervisor.attachApplicationLocked(app)是处理关于Activity的启动的。
AMS中有2个stack,一个是luncher相关的,一个是非luncher相关的也就是mFocusedStack。
stack.topRunningActivityLocked(null)是从stack里找到最近的task,然后取出task栈顶的Activity,然后调用真正启动Activity的函数realStartActivityLocked
应用收到请求之后封装了一个消息丢到主线程里,mH就是主线程的handle对象
创建Activity对象并执行onCreate回调,performStart执行onStart回调,最终会调到onResume回调
总结一下
网友评论