所謂的窗口(Window)就是一個(gè)顯示在手機(jī)屏幕上可視化視圖的一片區(qū)域。在Android中窗口是一個(gè)抽象的概念,每一個(gè)Activity就對(duì)應(yīng)著一個(gè)窗口,而所有的窗口都是由視圖(View)來呈現(xiàn),而我們知道View構(gòu)成的一個(gè)樹形結(jié)構(gòu)的視圖就組成了一個(gè)Activity的界面了。在android系統(tǒng)中窗口分為三個(gè)類型:

  • 應(yīng)用窗口:所謂應(yīng)用窗口指的就是該窗口對(duì)應(yīng)一個(gè)Activity,因此,要?jiǎng)?chuàng)建應(yīng)用窗口就必須在Activity中完成了。

  • 子窗口:所謂子窗口指的是必須依附在某個(gè)父窗口之上。

  • 系統(tǒng)窗口:所謂系統(tǒng)窗口指的是由系統(tǒng)進(jìn)程創(chuàng)建,不依賴于任何應(yīng)用或者不依附在任何父窗口之上。

android是如何創(chuàng)建應(yīng)用窗口的呢,下面來逐步分析:

startActivty的啟動(dòng)過程這里就不分析了,具體可以參考http://gityuan.com/2016/03/12/start-activity/,

這里從創(chuàng)建Activity來分析。

1.每個(gè)應(yīng)用窗口都對(duì)應(yīng)一個(gè)Activity對(duì)象,因此,要?jiǎng)?chuàng)建一個(gè)應(yīng)用窗口,都必須創(chuàng)建一個(gè)activity對(duì)象。當(dāng)ActivityManagerService(下面簡(jiǎn)稱AMS)準(zhǔn)備啟動(dòng)一個(gè)Activty時(shí),會(huì)去通知app進(jìn)程,每個(gè)app進(jìn)程都會(huì)對(duì)應(yīng)一個(gè)ActivtyThread類,任何Activty都隸屬于App進(jìn)程的,于是,啟動(dòng)Activty的任務(wù)就交給了ActivtyThread,

啟動(dòng)一個(gè)Activty,首先得創(chuàng)建一個(gè)Activty的對(duì)象,這個(gè)工作是在ActivtyThread.performLaunchActivity中完成的,下面看一下源碼:

private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
    ...    //創(chuàng)建Activity對(duì)象 
    Activity activity =