Android源代码,Java跟踪,抽象类

时间:2013-05-27 17:13:48

标签: java android abstract-class android-source android-fragmentactivity

我想了解Activity.javasetContentView()方法正在调用/做什么。

Here是Android源代码和第1646行的代码存根:

public void setContentView(int layoutResID) {
    getWindow().setContentView(layoutResID);
}

这是我的追踪......

在第642行,我们知道它的类型为android.view.Window

private Window mWindow;

但是Window.java是一个抽象类。在第738行,该方法也是抽象的:

public abstract void setContentView(int layoutResID);

实际的功能体在哪里实施?

返回Activity.java文件,在第3746行,我们发现mWindow的一些初始化:

mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
...

好吧,关于com.android.internal.policy.PolicyManagermakeNewWindow()

public static Window makeNewWindow(Context context) {
    return sPolicy.makeNewWindow(context);
}

private static final IPolicy sPolicy;
Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);
sPolicy = (IPolicy)policyClass.newInstance();

IPolicy.java是一个接口,这意味着根本没有实现。

我的踪迹无法继续下去。你能帮帮我吗?

特别是,我知道Activity.setContentView()最终会调用android.support.v4.app.Fragment.javaFragment.onInflate() - 第920行,Fragment.onAttach() - 第928行,Fragment.onCreate() - 第953行, Fragment.onCreateView() - 第967行和Fragment.onViewCreated() - 第991行。

1 个答案:

答案 0 :(得分:0)

你可以在这里找到这些来源

政策实施:source

窗口实现:source