<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Calvin's Tech Space

    成于堅忍,毀于浮躁

       :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
    Android 窗口管理
    在整個控件樹的最頂端,是一個邏輯的樹頂,ViewParent,在源碼中的實現(xiàn)是ViewRoot(ViewRoot extends Handler implements ViewParent)。它是整個控件樹和WindowManager之間的事件信息的翻譯者。WindowManager是Android中一個重要的服務(wù)。它將用戶的操作,翻譯成為指令,發(fā)送給呈現(xiàn)在界面上的各個Window。Activity會將頂級的控件注冊到WindowManager中,當(dāng)用戶真是觸碰屏幕或鍵盤的時候,WindowManager就會通知到,而當(dāng)控件有一些請求產(chǎn)生,也會經(jīng)由ViewParent送回到WindowManager中。從而完成整個通信流程。

    事件分發(fā)流程
    用戶在觸發(fā)一個時間后產(chǎn)生一個消息,消息先被window manager采集到,然后分發(fā)給client。
    window manager通過IWindow分發(fā)給client,我們知道ViewRoot使用IWindowSession與server通訊,使用IWindow接收消息,所以第一步消息到了ViewRoot這里來了
    也就是window manager->IWindow->ViewRoot
    到了ViewRoot后它把消息轉(zhuǎn)發(fā)給Looper(樓主可以看ViewRoot.java看它是怎么獲取當(dāng)前線程的Looper的)
    Looper->ViewRoot$RootHandler().dispatch(),有轉(zhuǎn)發(fā)會給ViewRoot,然后就通過decor view形成的樹狀結(jié)構(gòu)依次分發(fā)下去。

    window manager proxy中維護了view, ViewRoot, layout param三元組。
    每次調(diào)用window manager proxy的addView都會新增一個三元組。一般程序中都是調(diào)用addView(decor,...),也就是只對decor view調(diào)用addView

    *****************\
    在Activity在performLaunchActivity時,會使用Activity.attach()建立一個PhoneWindow主窗口。這個主窗口的建立并不是一個重點。handleResumeActivity真正要啟動一個Activity時候,將主窗口加入到WindowManager,當(dāng)然并不是將主窗口本身,而是將主窗口的DecorView加入到WindowManager中。

    • performLaunchActivity@ActivityThread.java
    attach()@Activity.javaSession.java
    addWindow()@WindowManager

    mWindow = PolicyManager.makeNewWindow(this); --實例化一個activity或者dialog或者widget的地方才會make new window
    • handleResumeActivity()@ActivityThread.java
    addView()@WindowManagerImpl.java --添加DecorView到WindowManager中
    setView()@ViewRoot.java
    add()@IwindowSession.java
    | --這里通過AIDL調(diào)用
    add()@WindowManagerService$Service.java

    關(guān)于PhoneWindow:
    而PhoneWindow只是做了一個具體跟手機功能相關(guān)的公用事件的處理,所以在Android中PhoneWindow并不是一個抽象的純正概念,而是一個跟手機系統(tǒng)相關(guān)的一個特別窗口概念,例如按鍵的默認(rèn)動作處理,按鍵音的發(fā)出等等。

    一個View對應(yīng)一個ViewRoot

    問題:WindowMangerService如果通過AIDL將事件派發(fā)到客戶端的?
    posted on 2010-11-24 18:28 calvin 閱讀(2884) 評論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 最近中文字幕2019高清免费| 美女视频黄a视频全免费网站一区| 好男人www免费高清视频在线| 成人亚洲国产精品久久| 亚洲综合国产精品| 免费在线观看毛片| 国产一级一片免费播放i| 69视频免费观看l| 美女视频黄a视频全免费网站色窝| 亚洲五月综合网色九月色| 亚洲精品无码久久久久去q| 日韩免费无码一区二区视频| 51在线视频免费观看视频| 99视频在线观看免费| 国产va免费精品| 一级特黄特色的免费大片视频| 亚洲久悠悠色悠在线播放| 丁香婷婷亚洲六月综合色| 亚洲精品在线免费观看视频| 亚洲国产精品lv| 老色鬼久久亚洲AV综合| 亚洲国产第一站精品蜜芽| 久久久久久亚洲精品中文字幕| 亚洲精品一品区二品区三品区| 亚洲色精品vr一区二区三区| 亚洲啪啪AV无码片| 亚洲ⅴ国产v天堂a无码二区| 亚洲精品在线观看视频| 亚洲videosbestsex日本| 亚洲中文无码mv| 一级做a爰片久久毛片免费陪 | 国产亚洲漂亮白嫩美女在线| 国产亚洲3p无码一区二区| 亚洲成色www久久网站夜月| 久久精品国产亚洲AV无码偷窥| 亚洲日韩国产精品无码av| 亚洲精品中文字幕| 99久久99这里只有免费的精品| 成年在线观看网站免费| 亚洲?V无码乱码国产精品| 亚洲视频在线不卡|