我想知道什麼Activity.java的setContentView()
方法正在調用/正在做什麼。Android源代碼,Java跟蹤,抽象類
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.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是一個接口,這意味着根本沒有實現。
我的蹤跡不能再進一步。你能幫我解決嗎?
特別是,我知道Activity.setContentView()
最終將調用android.support.v4.app.Fragment.java
的Fragment.onInflate()
- 線920,Fragment.onAttach()
- 線928,Fragment.onCreate()
- 線953,Fragment.onCreateView()
- 線967,和Fragment.onViewCreated()
- 線991
「特別是,我知道Activity.setContentView()最終會調用android.support.v4.app.Fragment.java的Fragment.onInflate()」 - 不,它不會。 'Activity'對'android.support.v4.app.Fragment'一無所知。 'Activity'可能知道一些關於'android.app.Fragment'的內容。 'android.support.v4.app.FragmentActivity'可能知道'android.support.v4.app.Fragment'。 – CommonsWare
是的@CommonsWare,你是對的。事實上,根據源代碼,在FragmentActivity.onCreate()中調用'Fragment.onAttach()','Fragment.onCreate()','Fragment.onCreateView()'和'Fragment.onViewCreated() >'mFragments.dispatchCreate()'>'FragmentManager.moveToState(Fragment.CREATED,false)'。但令人驚訝的是,我在'setContentView()'之前和之後以及這些'Fragment'方法中添加了一些'System.out.println()'。看來這些'Fragment'方法在'setContentView()'中被調用。 – midnite
[有些Java可以幫助使用Android源代碼?](http:// stackoverflow。COM /問題/ 16764572 /一些-java的幫助,用最Android的源代碼,請) – StarPinkER