【问题标题】:Android source code, Java trace, abstract classAndroid源代码、Java trace、抽象类
【发布时间】:2013-05-27 17:13:48
【问题描述】:

我想知道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 行和@987654347 @ - 第 991 行。

【问题讨论】:

  • “特别是,我知道 Activity.setContentView() 最终会调用 android.support.v4.app.Fragment.java 的 Fragment.onInflate()”——不,它不会。 Activityandroid.support.v4.app.Fragment 一无所知。 Activity 可能对android.app.Fragment 有所了解。 android.support.v4.app.FragmentActivity 可能对 android.support.v4.app.Fragment 有所了解。
  • 是的@CommonsWare,你是对的。其实根据源码,Fragment.onAttach()Fragment.onCreate()Fragment.onCreateView()Fragment.onViewCreated()是在FragmentActivity.onCreate()>mFragments.dispatchCreate()>FragmentManager.moveToState(Fragment.CREATED, false)中调用的。但令人惊讶的是,我在setContentView() 之前和之后添加了一些System.out.println()s,以及在那些Fragment 方法中。看来那些Fragment 方法是在setContentView() 中调用的。

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


【解决方案1】:

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

政策实施:source

窗口实现:source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多