4

在这里Android的来源Activity.java有些Java可以帮助使用Android源代码吗?

尤其在行1646年setContentView()方法:

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

回答

2

在哪里实际的功能体是否被执行?

mWindow = PolicyManager.makeNewWindow(this); 

在attach()方法:

private Window mWindow; 

的mWindow由初始化。查看PolicyManager.java中的PolicyManager.makeNewWindow方法。

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

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

而且POLICY_IMPL_CLASS_NAMEcom.android.internal.policy.impl.Policy。所以看看Policy.java。那就是:

public Window makeNewWindow(Context context) { 
    return new PhoneWindow(context); 
} 

而且setContentViewPhoneWindow.java

+0

感谢您的帮助implmenented!让我添加'com.android.internal.policy.impl的链接。政策'和'com.android.internal.policy.impl.PhoneWindow' [2.2](https://android.googlesource.com/platform/frameworks/policies/base/+/froyo-release/phone/com/android/ internal/policy/impl)| [2.3.5](https://android.googlesource.com/platform/frameworks/base/+/android-2.3.5_r1/policy/src/com/android/internal/policy/impl)。 – midnite

相关问题