核心研究 程式的執行過程

2021-06-25 21:37:45 字數 1283 閱讀 5899

public static final void main(string args) 

activitythread thread = new activitythread();

thread.attach(false);

if (false)

looper.loop();

if (process.supportsprocesses())

thread.detach();

: "";

slog.i(tag, "main thread of " + name + " is now exiting");

}

首先,activitythread從main()函式中開始執行,呼叫preparemainlooper()為ui執行緒建立乙個訊息佇列(messagequeue)。

其中binder負責接收遠端ams的ipc呼叫,接收到呼叫後,則通過handler把訊息傳送到訊息佇列,ui主線程會非同步地從訊息佇列中取出訊息並執行相應操作,比如start、stop、pause等。

final h mh = new h();

接著ui主線程呼叫looper.loop()方法進入訊息迴圈體,進入後就會不斷地從訊息佇列中讀取並處理訊息。

當activitythread接收到ams傳送start某個activity後,就會建立指定的activity物件。activity又會建立phonewindow類→decorview類→建立相應的view或者viewgroup。

建立完成後,activity需要把建立好的介面顯示到螢幕上,於是呼叫windowmanager類,後者於是建立乙個viewroot物件,該物件實際上建立了viewroot類和w類,建立viewroot物件後,windowmanager再呼叫wms提供的遠端介面完成新增乙個視窗並顯示到螢幕上。

接下來,使用者開始在程式介面上操作。keyq執行緒不斷把使用者訊息儲存到queueevent佇列中,inputdispatcherthread執行緒逐個取出訊息,然後呼叫wms中的相應函式處理該訊息。當wms發現該訊息屬於客戶端某個視窗時,就會呼叫相應視窗的w介面。

w類是乙個binder,負責接收wms的ipc呼叫,並把呼叫訊息傳遞給viewroot,viewroot再把訊息傳遞給ui主線程activitythread,activitythread解析該訊息並做相應的處理。在客戶端程式中,首先處理訊息的是decorview,如果decorview不想處理某個訊息,則可以將該訊息傳遞給其內部包含的子view或者viewgroup,如果還沒有處理,則傳遞給phonewindow,最後再傳遞給activity。

程式執行過程

要理解乙個程式的執行過程,首先要理解什麼是編譯器。我們用c語言寫的程式,計算機只能識別機器語言 二進位制指令 計算機並不能理解。因此,必須 將c語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源 檔案按照一定的對應規則映射程計算機能夠識別的二進位制指令 關於原始檔 目標檔案和可執行檔案 原...

程式執行過程

程式的執行過程大致分為以下四的步驟 1 預處理 2 編譯 3 彙編 4 鏈結 1.關於預處理 預處理階段的工作基本上是對源程式做 替代 主要有 巨集替換 條件編譯 標頭檔案展開 去除注釋 經過這番替換之後,就會生成乙個沒有巨集定義,沒有條件編譯 沒有特殊符號的輸出檔案。2.關於編譯 編譯階段的工作就...

程式執行過程

程式執行過程 不同作業系統可執行檔案的格式不同 linux elf execuatable and linkable file format windows pe portable executable format 這也是為什麼乙個程式無法同時在linux和windows下執行 這裡舉例elf檔案...