所謂的窗口(Window)就是一個顯示在手機屏幕上可視化視圖的一片區(qū)域。在Android中窗口是一個抽象的概念,每一個Activity就對應(yīng)著一個窗口,而所有的窗口都是由視圖(View)來呈現(xiàn),而我們知道View構(gòu)成的一個樹形結(jié)構(gòu)的視圖就組成了一個Activity的界面了。在android系統(tǒng)中窗口分為三個類型:
應(yīng)用窗口:所謂應(yīng)用窗口指的就是該窗口對應(yīng)一個Activity,因此,要創(chuàng)建應(yīng)用窗口就必須在Activity中完成了。
子窗口:所謂子窗口指的是必須依附在某個父窗口之上。
系統(tǒng)窗口:所謂系統(tǒng)窗口指的是由系統(tǒng)進(jìn)程創(chuàng)建,不依賴于任何應(yīng)用或者不依附在任何父窗口之上。
android是如何創(chuàng)建應(yīng)用窗口的呢,下面來逐步分析:
startActivty的啟動過程這里就不分析了,具體可以參考http://gityuan.com/2016/03/12/start-activity/,
這里從創(chuàng)建Activity來分析。
1.每個應(yīng)用窗口都對應(yīng)一個Activity對象,因此,要創(chuàng)建一個應(yīng)用窗口,都必須創(chuàng)建一個activity對象。當(dāng)ActivityManagerService(下面簡稱AMS)準(zhǔn)備啟動一個Activty時,會去通知app進(jìn)程,每個app進(jìn)程都會對應(yīng)一個ActivtyThread類,任何Activty都隸屬于App進(jìn)程的,于是,啟動Activty的任務(wù)就交給了ActivtyThread,
啟動一個Activty,首先得創(chuàng)建一個Activty的對象,這個工作是在ActivtyThread.performLaunchActivity中完成的,下面看一下源碼:
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) { ... //創(chuàng)建Activity對象 Activity activity =