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

相關問題