Activity启动流程

Activity调用startActivity主要是当前进程和AMS之间的交互,如果需要创建新进程则还需要AMS通过Socket通讯方式向Zygote请求创建新进程。
1. 当前进程通过Binder告诉AMS让它开始为启动Activity做准备,同时将当前进程的ActiviyThread传递给Activity,ActivityThread是一个Binder实体,AMS用它实现和当前进程的直接通讯。
2. AMS通过Intent搜集Activity信息,如果多个Activity符合条件还要进行弹框选择,并将Activity的相关信息保存在ActivityRecord中。
3. AMS根据Intent设置的flag还有Activity的xml配置文件判断是否需要新建Task,若需要则创建
4. AMS通过ActivityThread告诉当前进程pause掉当前Activity
5. 当前进程收到讯息后将消息放入Looper进行处理
6. handleMessage会执行Activity的OnPause,然后通过Binder告诉AMS已经pause完成
7. AMS判断是否要启用新的进程,如果需要通知Zygote创建新进程,新进程将执行ActivityThread的main方法,如果不需要直接进入9
8. 新进程中Activity先调用它的attach方法,attach会通知AMS去attachAppliaction,AMS将保存新建进程的ProcessRecord
9. 查看有没有将要创建的ActivityRecord,若有则告诉进程创建并启动这个Activty
10. 进程收到讯息同样放入looper,然后调用onAttach(构建各种Context)、onCreate、onResume

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值