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