从启动一个app 到 Activity的启动过程

Launcher 调用 startActivitySafely()

主要给意图添加一个

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ///设置成

就会调用Activity里面的

startActivity

在里面会调用startActivityForResult

在startActivityForResult 会有一个是否是mParent的判断是不是根Activity

有个类 Instrumentation 主要用来监控应用程序和系统的交互

然后调用 instrumentation的 execStartActivity

里面通过ActivityManager.getService() 的方法去调用startActivity

 

 

//Laucher 和AMS 获取AMS的代理对象

看一下ActivityManager的getService的方法

这里用了IActivityManagerSingleton的单例

在API28里面用的ActivityManagerProxy的代理 方式

最后 调用的AMS 里面的startActivity

结合上面说的

 

AMS到ApplicationThread的调用过程

 

看一下AMS 里面的startActivity 。 里面调用了 startActivityAsUser 比startActicity 多了一个参数

UserHandle.getCallingUserId();//AMS通过UserId 来确定调用者多权限问题

在这个里面做两个判断和处理

1 判断调用者进程是否呗隔离

2检查调用者多权限

 

 

AMS 调用startActivity-》 startActivityAsUser

最后返回ActivityStarter 调用 startActivityMayWait

在该方法里面调用startActivityLocked的方法(在API28 中说startActivity)

最后还是调用ActivityStarter里面的startActivity的方法

重点说一下这个startActivity的方法

IApplicationThread 类型的caller 是否为空 是各种方法一路通过传值的方法传过来的

会通过ActivityRecord 记录一个Activity的所有信息这个被记录的Activity 会被作为参数传下去

在ActivityStarter的startActivity里面startActivity里面startActivityUnchecked()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值