青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

Android 之 Window、WindowManager 與窗口管理

其實在android中真正展示給用戶的是window和view,activity在android中所其的作用主要是處理一些邏輯問題,比如生命周期的管理、建立窗口等。在android中,窗口的管理還是比較重要的一塊,因為他直接負責把內容展示給用戶,并和用戶進行交互。響應用戶的輸入等。

在講窗口管理時,有必要先說下ViewManager這個接口,這個接口主要有以下的實現子接口和實現類,分別是:WindowManagerViewGroup里面還有三個重要的方法:

      * addView(); 

     * updateViewLayout();

     * removeView();

WindowManager中,addView方法表示的是將主窗口中的頂級view(也就是DecorView)添加到WindowManager中,并建立會話。接下來會詳細介紹。我們先來看看Window

Window:

Window是android中的窗口,表示頂級窗口的意思,也就是主窗口,它有兩個實現類,PhoneWindow和MidWindow,我們一般的activity對應的主要是PhoneWindow,在activity中經常使用的setContentView等方法也是在這個里面實現的。

    @Override

    public void setContentView(View view,ViewGroup.LayoutParams params) {

        if (mContentParent == null) {

            installDecor();

        } else {

            mContentParent.removeAllViews();

        }

        mContentParent.addView(view, params);

        final Callback cb = getCallback();

        if (cb != null) {

           cb.onContentChanged(); //窗口類容發生變化時更新

        }

    }

 每個主窗口中都有一個View,稱之為DecorView,是主窗口中的頂級view(實際上就是ViewGroup),在View中有兩個成員變量叫做mParent、mChildren,它是用來管理view的上下級關系的。而ViewGroup是對一組View的管理。因此,在ViewGroup中建立了所有view的關系網。而最終ViewGroup附屬在主窗口上。這樣就很容易在窗口中通過findViewById找到具體的View了。view中的事件處理也是根據這個路徑來處理的。

我們再來看看ActivityThead中的兩個重要的方法(至于ActivityThead將在一篇中詳細介紹)

           performLaunchActivity( );

            handleResumeActivity( );

performLaunchActivity中,會調用activity.attach方法建立一個window, 在handleResumeActivity方法中啟動activity的時候,會將主窗口加入到WindowManager

             View decor =r.window.getDecorView(); //獲得窗口的頂級View

      decor.setVisibility(View.INVISIBLE);

      ViewManager wm= a.getWindowManager();    //WindowManager繼承自ViewManager

      WindowManager.LayoutParams l =r.window.getAttributes();

      a.mDecor = decor;

      l.type =WindowManager.LayoutParams.TYPE_BASE_APPLICATION;

     l.softInputMode |= forwardBit;

     if (a.mVisibleFromClient) {

         a.mWindowAdded = true;

         wm.addView(decor, l); //實際上是把主窗口的頂級view加入到WindowMangaer

      }

我們再來看看WindowManager。

WindowManager:

WindowManager主要用來管理窗口的一些狀態、屬性、view增加、刪除、更新、窗口順序、消息收集和處理等。

通過Context.getSystemService(Context.WINDOW_SERVICE)的方式可以獲得WindowManager的實例.

WindowManager繼承自ViewManager,里面涉及到窗口管理的三個重要方法,分別是:

     * addView(); 

     * updateViewLayout();

     * removeView();  

在WindowManager中還有一個重要的靜態類LayoutParams.通過它可以設置和獲得當前窗口的一些屬性。

我們先來看看addView()方法,在addView中,會利用LayoutParams獲得windowView屬性,并為每個window創建ViewRoot,ViewRootViewWindowManager之間的橋梁,真正把View傳遞給WindowManager的是通過ViewRootsetView()方法,ViewRoot實現了ViewWindowManager之間的消息傳遞。在將主窗口添加到WindowManger時,它首先會建立一個代理對象:

              wm=(WindowManagerImpl)context.getSystemService(Context.WINDOW_SERVICE)

并且打開會話(IWindowSession),之后Window將通過該會話與WindowManager建立聯系,

來看下setView方法:

         try {

        res =sWindowSession.add(mWindow, mWindowAttributes,

         getHostVisibility(), mAttachInfo.mContentInsets);

     } catch (RemoteException e) {

         mAdded = false;

        mView = null;

         mAttachInfo.mRootView =null;

         unscheduleTraversals();

         throw newRuntimeException("Adding window failed", e);

      } finally {

         if (restore) {

            attrs.restore();

         }

      }

在這段代碼中,ViewRoot通過IWindowSession把窗口添加到WindowManager中。ViewRoot繼承了Handler,實際上它的本質就是一個Handler,窗口中View的事件處理、消息發送、回調等將通過ViewRoot來處理。

這樣就完成了把窗口添加到WindowManager中,并交由WindowManager來管理窗口的view、事件、消息收集處理等。

posted on 2013-01-13 04:18 大龍 閱讀(1350) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲黄色免费| 一区二区三区四区五区精品| 亚洲一区制服诱惑| 国产美女扒开尿口久久久| 欧美一区二区三区在线| 午夜久久99| 伊人久久大香线蕉综合热线| 久久久久久久999| 久久欧美肥婆一二区| 亚洲三级视频| 一区二区三区产品免费精品久久75 | 亚洲私人黄色宅男| 亚洲私人影院在线观看| 国产欧美日韩一区二区三区在线观看| 欧美在线综合视频| 麻豆av一区二区三区| 一区二区三区不卡视频在线观看 | 一区二区三区视频免费在线观看| 国产精品久久久久永久免费观看| 久久久久国产成人精品亚洲午夜| 欧美aa在线视频| 亚洲一区二区少妇| 久久久高清一区二区三区| 日韩一二三在线视频播| 亚洲免费在线观看| 亚洲国产精品ⅴa在线观看| 一区二区精品在线| 亚洲欧美国产日韩中文字幕| 欧美激情一区二区三区在线视频| 国产亚洲欧洲| 亚洲国产成人精品久久久国产成人一区| 欧美激情麻豆| 久久av免费一区| 欧美国产一区二区在线观看 | 国产精品亚洲第一区在线暖暖韩国| 久久国产精品高清| 欧美日本亚洲韩国国产| 久久久久久久久岛国免费| 欧美色网在线| 亚洲高清在线| 在线免费观看欧美| 亚洲欧美日韩在线一区| 亚洲精选国产| 裸体丰满少妇做受久久99精品| 亚洲欧美另类综合偷拍| 欧美女同视频| 亚洲大片av| 一区二区三区在线不卡| 亚洲在线观看| 亚洲午夜精品一区二区| 欧美激情一区二区三区高清视频 | 亚洲国产高清一区二区三区| 国产又爽又黄的激情精品视频| 夜夜爽av福利精品导航 | 精品动漫3d一区二区三区| 亚洲一品av免费观看| 一区二区日本视频| 欧美国产精品久久| 亚洲成色777777在线观看影院| 亚洲一区二区综合| 欧美激情日韩| 亚洲黄网站黄| 99精品国产在热久久下载| 久热精品在线视频| 欧美成人精品一区二区| 亚洲第一在线视频| 久久综合亚洲社区| 欧美va日韩va| 亚洲欧洲日本一区二区三区| 免费看亚洲片| 亚洲人成绝费网站色www| 亚洲精品日本| 欧美男人的天堂| 宅男精品视频| 欧美一区午夜视频在线观看| 国产精品草草| 亚洲欧洲99久久| 米奇777超碰欧美日韩亚洲| 亚洲国产精品va在线看黑人动漫 | 欧美激情一区二区三区蜜桃视频 | 免费成人黄色av| 亚洲欧洲偷拍精品| 亚洲专区在线视频| 国产一区二区黄色| 老司机一区二区三区| 亚洲精品社区| 久久精品国产免费观看| 黄色成人在线| 欧美劲爆第一页| 亚洲小少妇裸体bbw| 久久久久国内| 日韩视频在线免费| 国产精品你懂的| 久久精品亚洲热| 亚洲精品视频在线看| 午夜久久黄色| 亚洲国产精品尤物yw在线观看| 欧美紧缚bdsm在线视频| 午夜久久久久久| 欧美激情第三页| 午夜在线视频一区二区区别| 激情亚洲成人| 国产精品成人观看视频免费| 久久国产精品第一页| 亚洲久色影视| 久久综合电影| 亚洲午夜精品久久| 在线成人h网| 国产精品国产三级国产aⅴ入口| 久久精品国产免费| 在线视频日韩| 91久久精品国产91性色| 久久久精彩视频| 一区二区三区精品视频在线观看| 国产亚洲免费的视频看| 欧美视频在线观看免费| 免费观看欧美在线视频的网站| 亚洲字幕在线观看| 亚洲三级视频| 欧美成年人网| 久久中文欧美| 欧美影院在线| 亚洲性视频h| 亚洲毛片在线观看.| 在线观看国产一区二区| 国产精品一区二区三区四区五区| 欧美激情无毛| 噜噜噜在线观看免费视频日韩| 午夜视频在线观看一区| 亚洲午夜精品视频| 日韩天堂av| 亚洲免费黄色| 亚洲精品国产拍免费91在线| 久久综合狠狠| 久久久久久久久久久久久女国产乱| 亚洲免费网站| 亚洲一区二区免费在线| 一本色道久久综合亚洲精品小说 | 欧美.www| 男人的天堂亚洲在线| 久久九九电影| 久久久久久久一区| 久久精品一区二区三区四区| 性欧美暴力猛交69hd| 午夜精品久久久久久久| 香蕉久久一区二区不卡无毒影院 | 一区二区三区在线免费观看| 国产一区二区三区的电影| 国产午夜精品视频免费不卡69堂| 国产麻豆成人精品| 国产亚洲亚洲| 亚洲电影免费观看高清| 亚洲精品乱码久久久久久蜜桃91 | 嫩草成人www欧美| 欧美激情一区二区三区四区| 欧美激情五月| 日韩一级在线| 亚洲男人第一av网站| 香蕉乱码成人久久天堂爱免费 | 亚洲资源在线观看| 欧美一区综合| 蜜臀a∨国产成人精品| 欧美电影资源| 欧美视频在线一区| 国产一区激情| 亚洲精品九九| 亚洲欧美综合精品久久成人| 久久久国产精品亚洲一区| 欧美777四色影视在线| 亚洲人成亚洲人成在线观看| 亚洲先锋成人| 免费观看成人www动漫视频| 欧美日韩国产首页| 国产亚洲激情| 亚洲三级视频| 欧美一区二区精品久久911| 欧美99久久| 一区二区高清视频| 久久全球大尺度高清视频| 欧美精品午夜视频| 国产一区二区三区av电影| 亚洲人成网在线播放| 欧美一区二粉嫩精品国产一线天| 免费观看日韩av| 亚洲视频在线免费观看| 麻豆精品一区二区综合av| 国产精品毛片a∨一区二区三区|国 | 国内伊人久久久久久网站视频| 亚洲人成人一区二区三区| 欧美在线观看网站| 最新亚洲激情| 欧美专区日韩视频| 国产精品电影网站| 亚洲人成在线播放| 久久深夜福利| 亚洲一区二区三区午夜| 欧美成人免费在线视频| 国产偷国产偷亚洲高清97cao| 一区二区国产在线观看| 蜜桃精品久久久久久久免费影院|