您的位置:首页 > 编程语言

从源代码理解调用OnCreate的路径

2016-04-10 21:47 357 查看
每个标题后的括号内容是 类到另一个类的跳转 。

一.(ActivityThread.main() -> Thread.attach() )

ActivityThread类是整个应用程序的入口,其中有个main方法;

public static void main(String[] args){
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
sMainThreadHandler = thread.getHandler();


二.(Thread.attach() -> ActivityManagerService .attachApplication() -> -> ActivityManagerService .attachApplicationLocked() )
然后我们进入到attach()方法中:

attach方法中会根据布尔值来分为系统应用和非系统应用

我们只看非系统应用:

IActivityManager mgr = ActivityManagerNative.getDefault();


可见ActivityManagerService 实现了IActivityManager接口,继承了ActivityManagerNative类,由getDefault()方法返回;

得到mgr后,attach中调用了mgr的attachApplication()方法;

接下来我们进入到ActivityManagerService类中看这个attachApplication方法:

这个方法中又调用了自身实例的attachApplicationLocked()方法;

三.( ActivityManagerService .attachApplicationLocked() -> Thread.bindApplication()&&ActivityManagerSupervisor.attachApplicationLocked() )

当然,接下来进入到attachApplicationLocked()中:

里面调用了Thread对象的bindApplication()方法;

以及ActivityManagerSupervisor类中的attachApplicationLocked()方法(这里注意和上面的ActivityMangerService的attachApplicationLocked()方法区别);

五.( ActivityManagerSupervisor.attachApplicationLocked() ->ActivityManagerSupervisor.realStartActivityLocked() ->ApplicationThread.scheduleLaunchActivity())

接着看ActivityManagerSupervisor.attachApplicationLocked()中的realStartActivityLocked方法;在里面,先配置Activity参数,接着调用ApplicationThread.scheduleLaunchActivity();

六.(ApplicationThread.scheduleLaunchActivity() -> H.handleLaunchActivity() )

scheduleLaunchActivity()中构造ActivityClientRecord对象并赋值给ActivityClientRecord对象中的域;最后发送一个标示为LAUNCH_ACTIVITY给H(Handler的子类);

七.(H.handleLaunchActivity() ->H.performLaunchActivity()-> Activity.performCreate() )

就这样进入了H中进行处理:

H中主要调用了handleLaunchActivity();而handleLaunchActivity()中主要调用的是performLaunchActivity();

在performLaunchActivity()中调用了Instrumentation类中的callActivityOnCreate();callActivityOnCreate()中调用了Activity类的performCreate()方法;

八.( Activity.performCreate() ->Activity.OnCreate())

最后的最后,就是Activity类中的OnCreate()方法;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: