用了这么多Activity的onCreate方法,那它framework层做了什么??

ps:可能我讲得不好,但是我还是想通过自己研究的思路分享下,对于有不对的地方,欢迎来虐!


在讲解之前,首先要预先知道相关的类

ActivityManagerService

ActivityThread

Instrumtation


最为关键的是ActivityThread类,入口出口还是它!内部的主要相关方法有【main(),attach(),ScheduleLaunchActivity(),H->Handler】


首先入口ActivityThread的main()方法--->1:准备Looper对象,循环消息队列;2:调用ActivityThread的attach()方法


attach方法里面做了什么呢?---> 跟ActivityManagerService绑定


那怎么绑定?--->首先是通过Binder机制,拿到ActivityManagerService的代理接口(ActivityManagerNative)


拿到了代理后调用其的attachApplicationLocked()方法进行绑定


完成绑定后--->构造一个ActivityStactSupervisor对象,调用里面的也是attachApplicationLocked()方法


这方法里面做什么呢?---> 调用realStartActivityLocked方法


realStatrtActivityLocked方法里面有干了什么呢?--->1:准备启动Activity的相关参数信息;2:调用ActivityThread的ScheduleLaunchActivity方法来启动Activity


怎么启动? ---> 1:构造一个ActivityClientRecord对象,并将相关参数的设置 ;2:调用ActivityThread的H对象的sendMessage的方法,把ActivityClientRecord的对象发送。


既然是Handler发送message是吧,那肯定是由发送的Handler来处理的,怎么处理返回的信息呢?


接收到信息后,调用其的handleLaunchActivity方法,


handleLaunchActivity方法里面再调用perforLaunchActivity方法,


perforLaunchActivity方法再调用instruction的对象的callActivityonCreate方法,


最后调用Activity的onCreate方法。



其中的framework层的代码我就不贴出来了。有兴趣的话可以查看源码,按照我的思路一步步点进去看!!

如果在找的过程中发现不对的地方,欢迎提出来,我再去研究研究。



已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页