Activity是如何启动的

1、Activity的main()方法去哪里了

在framwork层的ActivityThred类里面main方法中,prepare了一个mainlooper

实例化了一个ActivityThread

开启了一个looper

也就是说在main方法中开启了一个循环线程,通俗一点就是开启了一个死循环,循环从系统和主线程发来的各种消息。主线程不会做业务处理,主要负责UI的显示,循环后处理各种ui操作,如果循环停止了,也就表示当前的应用已经退出运行。同理,如果应用开启了,这个循环也就开启了。


2、Activity的声明周期是怎么来的


3、

Activity是通过startActivity()方法来启动的。

startActivity()最终调用的是startActivityForResult()方法。

在startActivityForResult()方法中,最终执行的是Instrumentation的execStartActivity()方法(Instrumentation是一个helper,相当于activity的辅助类,它做了两件事,一件事是调用了execStartActivity方法,该方法让启动流程继续执行,另一个是调用了checkStartActivityResult()方法checkStartActivityResult()方法检测到一些异常信息,会抛给开发者)。

exeStartActivity()方法又调用了AMS 的startActivity(whoThread)方法,其中一个最重要的参数whoThread,它是IApplicationThread的一个实例(IApplicationThread是一个接口,

它的具体实现是ApplicationThread,而ApplicationThread又是ActivityThread的一个内部类)。

继续往下执行,执行到了scheduleLaunchActivity()方法,该方法又回调了ActivityThread#H()方法







最后调用了Instrumentation的callActivityOnCreate()方法

之后又调用了自己的performCreate()方法,紧接着又回调了onCreate()方法



4、

H类继承自Handler,声明了一些消息类型,并对这些消息进行了分发,




在handMessage方法中,可以看到与声明周期方法类似的影子。

H类的scheduleActivity最终回调到了launchActivity这个类里,这个消息最终又执行了handleLaunchActivity


5、

performLaunchActivity()方法首先创建了一个ActivityInfo对象,并通过反射的方式创建加载了activity,紧接着又创建了一个activity实例,




执行了activity的attach方法,该方法主要是完成了一些数据的初始化,包括window、view、title、theme主题等等的一些初始化操作,




调用了instrumentation的callActivityOnCreate方法,回到了activity的onCreat()方法

activity.performStart()执行了activity的onStart()的回调

回调了activity的onRestoreInstanceState()方法


6、

7、

8、

9、

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值