本文总结自慕课网风语老师的Framwork的课程.
首先看三个问题:
1.启动Activity会经历哪些生命周期
2.冷启动大致流程,涉及哪些组件,通信过程是怎么样的
3.Activity启动过程中,生命周期回调原理
直接从我们最熟悉的startActivity看起
从startActivity开始,发起请求
mRemote.transact方法就是将请求封装起来,传递到binder,binder再转发到AMS
AMS收到onTransact的回调,onTransact通过请求码code,处理请求startActivity
(此Activity是AMS的函数,具体实现:)
1.首先查询Activity对应的进程是否启动,并且注册过自己的ApplicationThread
2.如果满足直接调用realStratActivityLocked函数,启动Activity
3.如果不满足需要先启动Activity所在的进程,再回过头启动Activity(也是调用realStratActivityLocked函数)
1.启动进程,并传递入口函数所在的类
2.向map中添加进程记录
3.发送一个延迟消息,应用进程启动后超时一定时间(10s)没有向AMS报告,AMS清理应用的所有信息
1.打开socket,
2.通过sokect向zygote发送消息并获取返回结果
zygote的处理:
1.读取参数
2.fork进程
3.分别处理父进程和子进程
ActivityThread的入口函数
1.开启looper
2.向AMS报告
小结:
1.thread.bindApplication,进行初始化
2.处理挂起的应用组件(因为之前启动的时候,进程没有启动)
mFocusedStack非Launcher进程的栈
1.封装一个ActivityClientRecord
2.发送一个Message
performLaunchActivity
handleResumeActivity
小结应用端启动Activity步骤:
涉及到的各个进程:
总结:
1.启动Activity要向AMS发起binder调用
2.Activity所在的进程是怎么启动的
3.应用Activity生命周期回调