Activity的启动流程

看了不少网上关于Activity的启动流程,但总觉得过犹不及,所以想自己通过自己的理解总结一下,这样自己也能通过自己的话讲出

来了,没有流程图,没有源码分析,只有自己的理解以及几个主要的类和函数,就能描绘清楚Activity的启动流程。

Instrumentation:可以理解成一个应用的使用手册,是给系统看的手册,准确的说是通过对清单文件的描述创建而来的,在应用启

动前就存在的对象,其中包含了很多重要的函数,包括对Activity,Application的创建,生命周期函数的回调等等。

ActivityThread:在Activity的启动流程中,该类出现在Instrumentation中,我们知道一个应用就是一个进程,进程的main函数就在

该类中,同时还有启动以及管理Activity的作用,其中有两个重要的内部类或者是对象,ApplicationThread以及H

ApplicationThread:是ActivityThread的内部类,继承的是一个IApplicationThread.Stub从名字可以看出来实际上是一个Binder。

主要作用是实现了该Binder的函数,其中包括了对Activity以及Receiver的管理函数等。

H:是ActivityThread的内部类,继承的是Handler,主要的作用是用来发送主要信息,包括启动Activity等关键信息。

AMS:是一个Binder,出现在Instrumention中,在Activity的启动中起到了主要的作用,是第一个进行跨进程操作的对象。

ActivityStackSupervisor以及AcivityStack:在Activity的启动中完成后期的一些数据准备的功能。

以上的几个主要的类之间的相互配合,共同完成了Activity的启动,主要的说明以及流程如下:

Activity是四大组件之一,是一种展示型组件,继承关系:Activity<--ContextThemeWrapper<--ContextWrapper<--Context<--Object

1.不管是通过startActivity还是startActivityForResult启动Activity,最终都会使用startActivityForResult开始启动Activity,后者会调用

Instrumentation的execStartActivity方法开始启动Activity

2.execStartActivity中会调用AMS(实际是一个Binder)的startActivity方法,所以启动就从Instrumentation转移到了

ActivityManagerService中

3.在AMS中会串行调用ActivityStackSupervisor以及AcivityStack中的方法,最终会回到ActivityStackSupervisor的

realStartActivityLocked方法中

4.realStartActivityLocked方法又会通过Binder来调用ApplicationThread中的scheduleLaunchActivity,该方法内容主要是

通过H跨线程发送一个启动activity的消息

5.在ActivityThread中,对H发送的消息进行处理调用handleLaunchActivity,在该方法中会调用performLaunchActivity,该方法主要

完成以下工作:

          a.获取组件信息

          b.通过Instrumentation的newActivity方法使用类加载器创建Activity对象

          c.通过LoadedApk的makeApplication尝试创建Application对象

          d.通过ContextImpl对象以及Activity的attach方法完成重要数据的初始化。

          e.调用Activity的onCreate方法。

 

至此Activity就执行到了onCreate方法,然后再通过Instrumention进行后续生命周期的回调。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值