Android核心剖析之Window內部機制

2021-08-16 18:01:48 字數 1318 閱讀 4104

windowmanager其實指示乙個介面,其具體實現是在windowmanagerimpl,而windowmanagerimpl其實什麼都沒做,指示呼叫windowmanagerglobal中的方法來實現的,windowmanagerglobal是個單例模式,通過win。windowmanagerglobal.getinstance()來獲取例項。

windowmanager 通過三個方法來操作window,addview,removeview, updateviewlayout。

window.layoutparams的兩個屬性非常重要,懸浮式的activity就是通過這flags、type 這2個屬性來實現的。

window的增加過程,即是view的增加過程,每個window對應乙個view、viewroot(viewrootimpl是viewroot的實現),windowmanager通過addview增加乙個view,其實通過呼叫windowmanagergloabal中的addview;而在windowmanagergloabal中addview方法中,其實是呼叫了viewrootimpl中的addview方法。viewrootimpl中的addview只是傳送乙個請求增加訊息之後返回。viewroot繼承了handler。

懸浮式視窗的實現:

首先,懸浮式activity需要在androidmanifest.xml中對應的activity上配置屬性:

android:theme="@style/theme.windowactivity"
name="android:windownotitle">true

item>

name="android:windowistranslucent">false

item>

name="android:backgrounddimenabled">false

item>

name="android:windowbackground">@android:color/transparentitem>

name="android:windowframe">@nullitem>

name="android:windowfullscreen">false

item>

做了以上的配置後,activity已經可以實現視窗懸浮式顯示了,但是面對大屏顯示,需要控制其的顯示位置,我們該如何設定呢?可以參考以下方案:

在activity中複寫以下方法實現位置控制,具體參考以下**:

@override  

public void onattachedtowindow()

linux核心剖析之main c

main函式主要做一些初始化,比如記憶體,塊裝置 字元裝置等的初始化,然後建立子程序開啟bin sh mem init main memory start,memory end trap init 陷阱門 硬體中斷向量 初始化。kernel traps.c blk dev init 塊裝置初始化。k...

Android之執行緒池深度剖析

public final class threadpool 建立執行緒池,worker num為執行緒池中工作執行緒的個數 private threadpool int worker num 單態模式,獲得乙個預設執行緒個數的執行緒池 public static threadpool getthre...

Android原始碼剖析之Framwork層後記篇

有關資源訪問 data dalvik cache class.dex的存放目錄或odex data data 資料安裝的路徑 attr用來設定一些檢視的屬性 資源的訪問可以通過context或packagemanager的方法實現 id小於0x1000,0000是系統資源,大於0x7000,0000...