Android発見の旅のViewRootImpl,Activity,Window,DecorViewの関係
2038 ワード
Androidの複雑な概念は、よく人をめまいがして転向させる.本編ではuiのいくつかの概念の関係について述べる.
1.activity起動プロセスから各オブジェクトの関係がわかる
これはandroid uiの核心概念であることはよく知られています.インタフェースのアクティブなインタフェースです.startActivity方式で起動する.中間状態を省く:
Activityのattachインタフェースで:
Activity ThreadのhandleResumeActivityインタフェースでは、
WindowManagerGlobalのaddView会
つまり、ViewRootImplのmViewは実はDecorViewです.
2.まとめ
各activityにはwindowがあり、windowはwindowmanagerによって管理されている.
各ウィンドウにdecorviewがあります.
ウィンドウごとに
描画開始はViewRoot.
イベントの発信元
転送canvasを描画します.canvasはsurfaceから来ます.
1.activity起動プロセスから各オブジェクトの関係がわかる
これはandroid uiの核心概念であることはよく知られています.インタフェースのアクティブなインタフェースです.startActivity方式で起動する.中間状態を省く:
Activityのattachインタフェースで:
5063 mWindow = PolicyManager.makeNewWindow(this); activity Window .
5064 mWindow.setCallback(this); window activity
5087 mWindow.setWindowManager( window manager
5088 (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
5089 mToken, mComponent.flattenToString(),
5090 (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
5091 if (mParent != null) {
5092 mWindow.setContainer(mParent.getWindow());
5093 }
5094 mWindowManager = mWindow.getWindowManager(); windowmanager
Activity ThreadのhandleResumeActivityインタフェースでは、
2796 r.window = r.activity.getWindow();
2797 View decor = r.window.getDecorView(); decorview window , window
2798 decor.setVisibility(View.INVISIBLE);
2799 ViewManager wm = a.getWindowManager();
2800 WindowManager.LayoutParams l = r.window.getAttributes();
2801 a.mDecor = decor; activity mDecor
2804 if (a.mVisibleFromClient) {
2805 a.mWindowAdded = true;
2806 wm.addView(decor, l); WindowManagerGlobal addView
2807 }
WindowManagerGlobalのaddView会
16 root = new ViewRootImpl(view.getContext(), display);
6 root.setView(view, wparams, panelParentView);
つまり、ViewRootImplのmViewは実はDecorViewです.
2.まとめ
各activityにはwindowがあり、windowはwindowmanagerによって管理されている.
各ウィンドウにdecorviewがあります.
ウィンドウごとに
描画開始はViewRoot.
イベントの発信元
転送canvasを描画します.canvasはsurfaceから来ます.