android Service中創(chuàng)建window

image.png
windowManager.addView(overLayView, params);

.....
//WindowManagerImpl
    @Override
    public void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) {
        applyDefaultToken(params);
        mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);
    }

//WindowManagerGlobal
    public void addView(View view, ViewGroup.LayoutParams params,
            Display display, Window parentWindow) {

            root = new ViewRootImpl(view.getContext(), display);

            view.setLayoutParams(wparams);

            mViews.add(view);
            mRoots.add(root);
            mParams.add(wparams);

            root.setView(view, wparams, panelParentView);
    }


//ViewRootImpl
   /**
     * We have one child
     */
    public void setView(View view, WindowManager.LayoutParams attrs, View panelParentView) {
                mAttachInfo.mRootView = view;
                if (panelParentView != null) {
                    mAttachInfo.mPanelParentWindowToken
                            = panelParentView.getApplicationWindowToken();
                }
                mAdded = true;
                res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes,
                            getHostVisibility(), mDisplay.getDisplayId(),
                            mAttachInfo.mContentInsets, mAttachInfo.mStableInsets,
                            mAttachInfo.mOutsets, mInputChannel);

    }

每個activity中附帶一個window饲窿。在service中addView會新建一個window,生命周期伴隨整個APP。

WindowManagerImpl是客戶端WindowManager管理接口的實現(xiàn),WindowManagerImpl內(nèi)部維護一個單例的WindowManagerGlobal對象,WindowManagerImpl通過該對象轉(zhuǎn)發(fā)客戶端的窗口管理請求肆汹。客戶端在創(chuàng)建窗口時首先調(diào)用getWindowManager獲得本地窗口管理對象予权,并調(diào)用其addView昂勉、removeView、UpdateViewLayout為窗口進行布局控制
ViewManagerImp是Viewmanager的實現(xiàn)扫腺,該類并沒有直接實現(xiàn)Window的操作岗照,而是由WindowmanagerGlobal進行操作。
WindowManagerGlobal對象內(nèi)部維護一個ViewRootImpl實例數(shù)組和一個View視圖對象數(shù)組笆环,WindowmanagerGlobal的addView函數(shù)首先查看要添加的視圖是否已經(jīng)存在攒至,若不存在則實例化一個ViewRootImpl對象,并把view和ViewRootImpl對象及布局參數(shù)保存到本地數(shù)組中躁劣,接著調(diào)用ViewRootImpl對象的setView函數(shù)迫吐;removeView通過調(diào)用ViewRootImpl的die方法進行,最終調(diào)用dispatchDetachedFromWindow進行移除;updateViewLayout首先更新View的LayoutParams并替換掉老的LayoutParams账忘,接著更新ViewRootImpl的Layoutparams,通過調(diào)用scheduleTraversals對View重新布局

作者:黃俊彬
鏈接:http://www.reibang.com/p/f7050a38949d

Window 有三種類型志膀,分別是應用 Window熙宇、子 Window 和系統(tǒng) Window。應用類 Window 對應一個 Acitivity溉浙,子 Window 不能單獨存在烫止,需要依附在特定的父 Window 中,比如常見的一些 Dialog 就是一個子 Window戳稽。系統(tǒng) Window是需要聲明權限才能創(chuàng)建的 Window烈拒,比如 Toast 和系統(tǒng)狀態(tài)欄都是系統(tǒng) Window。

Window 是分層的广鳍,每個 Window 都有對應的 z-ordered,層級大的會覆蓋在層級小的 Window 上面吓妆,這和 HTML 中的 z-index 概念是完全一致的赊时。在三種 Window 中,應用 Window 層級范圍是 1~99行拢,子 Window 層級范圍是 1000~1999祖秒,系統(tǒng) Window 層級范圍是 2000~2999,我們可以用一個表格來直觀的表示:

版權聲明:本文為CSDN博主「王英豪」的原創(chuàng)文章舟奠,遵循CC 4.0 by-sa版權協(xié)議竭缝,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yhaolpz/article/details/68936932

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沼瘫,一起剝皮案震驚了整個濱河市抬纸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耿戚,老刑警劉巖湿故,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膜蛔,居然都是意外死亡坛猪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門皂股,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墅茉,“玉大人,你說我怎么就攤上這事呜呐【徒铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵蘑辑,是天一觀的道長战转。 經(jīng)常有香客問我,道長以躯,這世上最難降的妖魔是什么槐秧? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任啄踊,我火速辦了婚禮,結果婚禮上刁标,老公的妹妹穿的比我還像新娘颠通。我一直安慰自己,他們只是感情好膀懈,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布顿锰。 她就那樣靜靜地躺著,像睡著了一般启搂。 火紅的嫁衣襯著肌膚如雪硼控。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天胳赌,我揣著相機與錄音牢撼,去河邊找鬼。 笑死疑苫,一個胖子當著我的面吹牛熏版,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捍掺,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼撼短,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挺勿?” 一聲冷哼從身側(cè)響起曲横,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不瓶,沒想到半個月后胜榔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡湃番,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年夭织,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吠撮。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡尊惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泥兰,到底是詐尸還是另有隱情弄屡,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布鞋诗,位于F島的核電站膀捷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏削彬。R本人自食惡果不足惜全庸,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一秀仲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壶笼,春花似錦神僵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至责语,卻和暖如春炮障,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坤候。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工胁赢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铐拐。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像练对,于是被迫代替她去往敵國和親遍蟋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容