Framework startActivity流程

先上栈信息
在这里插入图片描述
这里我在源码里面加入了一句log
``在这里插入图片描述
我们先正向分析,后面再结合反向堆栈反查快速撸完整个流程。

点完一共就这么几个类
在这里插入图片描述

从Activity的startactivity一直点,出现了Instrumentation这个类
在这里插入图片描述
alt+7简单看下其成员,发现了ActivityThread,我们大概知道他主要是ActivityThread的一个包装类
在这里插入图片描述

到了这里是去获取AMS了,要知道AMS就是和ActivityThread交互,一个服务端一个客户端,这也就说明了Instrumentation 其实就是ActivityTheread的一个包装类。
在这里插入图片描述
继续向下,点到IActivityManager中,这个是一个AIDL编译产生的的java文件,所以需要先编译一下才会有这个继承提示。
在这里插入图片描述
在这里插入图片描述
ASM继承Stub也就是说他就是IActivityManager的具体实现。

一直往下,到了startActivityUnchecked我们发现,已经出现了三个我们陌生的类了。
在这里插入图片描述
ActivityStarter 我们简单看下成员,猜测其功能
有ASM那它也是AMS的包装类,注意其中的MyTargetStack就是我们最终要跳转的实例,这个是后面发现。
在这里插入图片描述
接下来看下ActivityStack,他居然同时有AMS和WMS两个类,同时有ActivityRecord和TaskRecord两个类,我们就不展开了,大胆的猜测ActivityRecord是Activity,也就是每个活动的信息,TaskRecord就是栈信息,他存储ActivityRecord和Activity的状态信息,如Resume,Pause。
在这里插入图片描述
最后我们看下这个mTargetStack,我理解它是我们要跳转的界面的堆栈管理器,从成员中可以推测。

简单追踪一下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相当于是判断这个app 和thread在不在,其实就是调用ActivityThread的ApplicationThread的具体实现,我们知道ApplicationThread是个AIDL,他最终一定会调用AMS的AIDL
在这里插入图片描述
在这里插入图片描述

后面就是我们常见的oncreat pause resume等生命周期的事情,
我们需要关系的是以下这个ContextImpl,有了它,Activity才能进行startServices操作,这也是我前一篇讲到的 https://blog.youkuaiyun.com/qq_20330595/article/details/145949379
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值