3

Activity.javasetContentView()メソッドが呼び出している/実行していることを正確に知りたいです。

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.javaFragment.onInflate()- 920 行目、Fragment.onAttach()- 928 行目、Fragment.onCreate()- 953 行目、Fragment.onCreateView()- 967 行目、Fragment.onViewCreated()- 991 行目を呼び出すことを知っています。

4

1 に答える 1

0

このソースはここにあります

ポリシーの実装:ソース

ウィンドウの実装:ソース

于 2013-11-26T09:10:35.290 に答える