android源码--activity启动源码分析

1.app应用的真正入口是ActivityThread类中的main()方法。
这里写图片描述
2.调用Looper.prepareMainLooper()方法。
这里写图片描述
3.调用prepare(false)方法,这里的threadLocal其实就是一个map集合。这样新创建了一个Looper对象,添加到集合中。
这里写图片描述
在Looper的构造器中,初始化了消息队列并且获取当前的线程
这里写图片描述
4.调用myLooper()方法,将存储在集合中的Looper对象取出来
这里写图片描述
5.在ActivityThread类中的main()方法中创建了ActivityThread的对象后调用attach()方法,这里传递的参数system是false,因此只查看非系统的部分。
这里写图片描述
这里写图片描述
这里写图片描述

6.在这里的ActivityManagerNative类中,才是真正的管理Activity、Service等的地方,在这里有startActivity() startSerVice()等等的方法。在ActivityManagerNative.getDefault()方法中返回的是ActivityManagerService()类。
这里写图片描述
7.在调用ActivityManagerService中的attachApplication()方法
这里写图片描述

8.在调用attachApplicationLocked()方法中,其中重要方法为bindApplication(),主要是进行绑定给thread数据
这里写图片描述
9.在StackSupervisor类中,调用attachApplicationLocked()方法,并且调用readlStartActivityLocked()方法,进行真正的启动activity
这里写图片描述
10.在realStartActivityLocked()方法中进行启动activity
这里写图片描述

11.调用在ActivityThread中的scheduleLaunchActivity()方法。
这里写图片描述
12.在handler H中
这里写图片描述
这里写图片描述

13.在performLauchAcitivity()方法中处理具体的Activity的启动逻辑,在这里创建了Activity的对象,并且调用了oncreate()方法
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
14.调用Instrumentation类中的Activity的onCreate()方法
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yuezheyue123/article/details/82592208