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

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

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

    Calvin's Tech Space

    成于堅(jiān)忍,毀于浮躁

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

    事件分發(fā)流程
    用戶在觸發(fā)一個(gè)時(shí)間后產(chǎn)生一個(gè)消息,消息先被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ā)會(huì)給ViewRoot,然后就通過decor view形成的樹狀結(jié)構(gòu)依次分發(fā)下去。

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

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

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

    mWindow = PolicyManager.makeNewWindow(this); --實(shí)例化一個(gè)activity或者dialog或者widget的地方才會(huì)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只是做了一個(gè)具體跟手機(jī)功能相關(guān)的公用事件的處理,所以在Android中PhoneWindow并不是一個(gè)抽象的純正概念,而是一個(gè)跟手機(jī)系統(tǒng)相關(guān)的一個(gè)特別窗口概念,例如按鍵的默認(rèn)動(dòng)作處理,按鍵音的發(fā)出等等。

    一個(gè)View對(duì)應(yīng)一個(gè)ViewRoot

    問題:WindowMangerService如果通過AIDL將事件派發(fā)到客戶端的?
    posted on 2010-11-24 18:28 calvin 閱讀(2884) 評(píng)論(0)  編輯  收藏 所屬分類: Android
    主站蜘蛛池模板: 在线播放免费播放av片| 亚洲国产精品免费在线观看| 成人黄动漫画免费网站视频| 亚洲黄色中文字幕| 99re免费在线视频| 亚洲精彩视频在线观看| 最近免费字幕中文大全视频 | 性短视频在线观看免费不卡流畅 | 亚洲精品天堂成人片AV在线播放 | 韩国免费A级毛片久久| 亚洲熟妇av一区二区三区漫画| 中文在线免费观看| 亚洲欧洲无码AV电影在线观看 | 亚洲国产精品毛片av不卡在线| 边摸边脱吃奶边高潮视频免费| 久久久久亚洲AV成人网人人网站| 皇色在线免费视频| 亚洲视频在线视频| 97碰公开在线观看免费视频| 亚洲人成色在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 中文字幕无码日韩专区免费 | 又粗又硬免费毛片| 91免费国产视频| 亚洲欧洲视频在线观看| 香蕉视频在线观看免费国产婷婷| 青青久久精品国产免费看| 亚洲爆乳无码专区| 免费做爰猛烈吃奶摸视频在线观看 | 亚洲性日韩精品国产一区二区| 免费福利在线视频| 中文有码亚洲制服av片| 亚洲免费在线观看| 亚州免费一级毛片| 亚洲AV无码专区在线厂| 亚洲国产精品无码av| 天天看免费高清影视| 三级网站免费观看| 午夜亚洲国产理论片二级港台二级| 亚洲成AV人片一区二区密柚| 巨胸喷奶水视频www网免费|