activity启动过程文字讲解

第一步应用安装

安装应用的时候,系统会启动一个PackaManagerService的管理服务,这个管理服务会对AndroidManifest.xml文件进行解析,从而得到应用程序中的相关信息,比如service,activity,Broadcast等等,然后获得相关组件的信息,保存到ShortcutInfo类中。

第二步Launcher应用启动安装的应用

我们都知道Launcher也是个应用,源代码工程在packages/apps/Launcher2目录下。

1、app点击会执行click事件,这时从tag中得到ShortcutInfo类,得到intent。然后通过startActivitySafely方法启动

2、startActivitySafely调用了startActivity,startActivity又调用了startActivityForResult传值-1,表示不需要任何返回

3、在startActivityForResult方法中实际是通过Instrumentation类中的execStartActivity()方法来启动activity(Instrumentation这个类主要作用就是监控程序和系统之间的交互)

4、execStartActivity()方法中会获取ActivityManagerService的代理对象,通过这个代理对象调用startActivity方法启动activity

5、ActivityManagerService.startAcitvity方法执行了ActivityStack.startActivityMayWait方法,该方法主要通过ActivityInfo解析包名和activity名设置到intent的Component中

6、中间通过ActivityManagerService.startProcessLocked()方法中的Process.start接口来创建一个新的进程,新的进程会导入android.app.ActivityThread类,并且执行它的main函数,这就是为什么我们前面说每一个应用程序都有一个ActivityThread实例来对应的原因

7、最后经过了很多方法后调用的是Application.scheduleLaunchActivity()进行启动activity而这个方法中通过获取得到一个ActivityClientRecord对象,而这个ActivityClientRecord通过handler来进行消息的发送,系统内部会将每一个activity组件使用ActivityClientRecord对象来进行描述,而ActivityClientRecord对象中保存有一个LoaderApk对象,通过这个对象调用handleLaunchActivity来启动activity组件,而页面的生命周期方法也就是在这个方法中进行调用

代码文章如下

https://blog.csdn.net/luoshengyang/article/details/6689748#commentsedit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值