我想知道 Activity.java 到底是什么的 setContentView()
方法正在调用/执行。
Here是 Android 源代码和第 1646 行的代码 stub :
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.PolicyManager
的 makeNewWindow()
:
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是一个接口(interface),这意味着根本没有实现。
我的踪迹无法再进一步。你能帮帮我吗?
特别是,我知道 Activity.setContentView()
最终会调用 android.support.v4.app.Fragment.java
的 Fragment.onInflate()
- 第 920 行,Fragment.onAttach()
- 第 928 行,Fragment.onCreate()
- 第 953 行, Fragment.onCreateView()
- 第 967 行和 Fragment.onViewCreated()
- 第 991 行。
最佳答案
关于java - Android源码,Java trace,抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777735/