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()方法