日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)Android → android窗口管理客戶端和服務(wù)器端解析

      android窗口管理客戶端和服務(wù)器端解析

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2012/10/25 8:55:34字體大。A-A+

      作者:noTice520點(diǎn)擊:4次評(píng)論:0次標(biāo)簽: android

      • 類型:源碼相關(guān)大。23.6M語言:中文 評(píng)分:9.1
      • 標(biāo)簽:
      立即下載

      android平臺(tái)現(xiàn)在占據(jù)了大部分的移動(dòng)設(shè)備系統(tǒng),android開發(fā)中的窗口管理不同于pc平臺(tái)的窗口。

      窗口管理是android的一個(gè)核心內(nèi)容。它管理著窗口的創(chuàng)建和銷毀,布局和大小,焦點(diǎn)的控制等等。

      窗口可以分為兩類:

      一種是應(yīng)用窗口,即由具體應(yīng)用創(chuàng)建的窗口,其實(shí)其中還可以細(xì)分出父窗口和子窗口。窗口一般都會(huì)對(duì)應(yīng)一個(gè)activity。

      一種是系統(tǒng)窗口,如狀態(tài)欄,這類窗口由系統(tǒng)直接通過windowManager來創(chuàng)建,和activity無關(guān)。

      在這里,窗口的概念其實(shí)可以說由三部分構(gòu)成,一部分是用來描述窗口信息的,由WindowState對(duì)象表示。一個(gè)WindowState對(duì)象對(duì)應(yīng)一個(gè)窗口,它擁有繪制窗口所需要的信息。但是真正去繪制窗口需要另一部分內(nèi)容Surface來完成,最終會(huì)通過surfaceflinger完成繪圖。還有一部分就是對(duì)消息的處理,windowmanagerService把窗口信息傳遞給InputManager,這樣InputDispatcher就能根據(jù)當(dāng)前窗口的狀態(tài)進(jìn)行消息處理。

      我們先看下整體的架構(gòu)圖,然后再來看這兩種窗口的創(chuàng)建。WindowManager和其他很多android的服務(wù)一樣,采用C/S的架構(gòu)。其中windowManagerService跑在System_server進(jìn)程,作為服務(wù)端,客戶端通過ipc調(diào)用和它進(jìn)行交互。

      我們通過完整的應(yīng)用程序窗口創(chuàng)建流程來了解這個(gè)結(jié)構(gòu)和整個(gè)過程。我們不去糾結(jié)其中代碼的一些細(xì)枝末節(jié)的東西,通過整體和重要的東西來看。

      一.客戶端部分

      在客戶端,在應(yīng)用啟動(dòng)的時(shí)候,ActivityThread會(huì)調(diào)用performLaunchActivity方法,去實(shí)例化一個(gè)activity,同時(shí)調(diào)用attach方法,并傳遞很多和activity相關(guān)的參數(shù)信息。其中有個(gè)比較重要的東西是一個(gè)IBinder對(duì)象token,這個(gè)token成為activity的標(biāo)識(shí),windowmanagerService可以通過這個(gè)token獲得activity當(dāng)前的運(yùn)行狀態(tài)。在WindowManager中會(huì)通過該token生成一個(gè)WindowToken對(duì)象,一個(gè)父窗口對(duì)應(yīng)一個(gè)WindowToken,而具有相同token的所有其子窗口都會(huì)被歸到一個(gè)WindowToken中。即如果token相同,表示他們都會(huì)在一個(gè)窗口中。還有個(gè)用來標(biāo)識(shí)窗口的類AppWindowToken,繼承自WindowToken,它由activity傳過來的token生成,和Activity一一對(duì)應(yīng)。通過token,就能找到activity和window的對(duì)應(yīng)關(guān)系來。

      繼續(xù)往下看,attach方法會(huì)通過代碼mWindow = PolicyManager.makeNewWindow(this)實(shí)例化一個(gè)phoneWindow對(duì)象,但是這個(gè)對(duì)象還是比較抽象的東西。在activity開始o(jì)ncreate調(diào)用時(shí),會(huì)調(diào)用setContentView方法。會(huì)去獲得之前那個(gè)phoneWIndow對(duì)象對(duì)應(yīng)的DecorView,最后通過層層窗口修飾(狀態(tài)欄等)后調(diào)用activity的makeVisible方法,在方法中通過addiew方法完成窗口的添加。

      windowManager只是提供接口,用了橋接模式,真正實(shí)現(xiàn)是WindowManagerImpl類。而調(diào)用addiew方法的對(duì)象來自另一個(gè)類LocalWindowManager,它會(huì)做一些簡(jiǎn)單檢查,再通過WindowManagerImp類的addview完成窗口添加。addview大概分四步執(zhí)行:

      1.校驗(yàn)該窗口是否已經(jīng)添加過了。

      2.判斷窗口類型如果是子窗口,則找到它附屬的父窗口

      3.new一個(gè)ViewRootImpl對(duì)象,最后調(diào)用該對(duì)象的setView方法。

      setView 方法會(huì)最終會(huì)通過ipc調(diào)用IwindowSession的add方法。Session類實(shí)現(xiàn)了該方法,并最終給WindowManagerService處理?蛻舳说墓ぷ髦链司屯瓿闪恕

      這里說明一下ViewRootImpl類,這其實(shí)是個(gè)handler。自然的,它一部分功能就是對(duì)消息進(jìn)行處理,將用戶的一些操作分發(fā)到view中。它也是view和WindowManagerService的橋梁?梢钥吹剿ㄟ^一個(gè)會(huì)話將信息傳遞到了WindowManagerService。而WIndowManagerService也會(huì)通過IWindow接口將指令通過消息的方式發(fā)送到ViewRootImpl,ViewRootImpl處理這些消息。

      二.服務(wù)端

      WindowManagerService的addWindow方法主要做三部分的處理。

      1.做一些合法性校驗(yàn)

      2.完成窗口數(shù)據(jù)的構(gòu)建

      3.完成窗口創(chuàng)建后需要作出的一些調(diào)整

      我們只看第二部分。首先會(huì)new一個(gè)WindowState類,該類表示一個(gè)窗口。結(jié)合WindowToken和AppWindowToken,完整的定義了一個(gè)窗口內(nèi)容。接著創(chuàng)建一個(gè)管道,用于處理消息輸入。再然后調(diào)用attach方法,創(chuàng)建和Surface相關(guān)的內(nèi)容,用于和surfaceFlinger交互。這樣,整個(gè)窗口就搭建完成了。有了WindowState類對(duì)窗口屬性的保存以及token對(duì)窗口歸屬的標(biāo)識(shí),之后就可以通過SurfaceFlinger繪制在屏幕上了。之后通過InputManager,也能處理消息和WindowManagerService之間的傳遞。保證窗口顯示內(nèi)容和用戶操作保持一致性。

      當(dāng)然,WindowManagerService靠近10000行的代碼完成了很多功能,因?yàn)檫@篇文章只會(huì)了解窗口管理的整個(gè)架構(gòu),這里不一一詳解,以后有時(shí)間可能會(huì)把一些比較有意思的內(nèi)容再看下:

      1.      窗口的創(chuàng)建和刪除

      2.      窗口的顯示和隱藏控制

      3.      Z-order順序管理

      4.      焦點(diǎn)窗口管理

      5.      輸入法窗口管理和墻紙窗口管理

      6.      切換動(dòng)畫

      7.      系統(tǒng)消息收集和分發(fā)

      現(xiàn)在,再來看開始的架構(gòu)圖,應(yīng)該就比較清晰了。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)