與Handler綁定的有兩個(gè)隊(duì)列,一個(gè)為消息隊(duì)列,另一個(gè)為線程隊(duì)列。Handler可以通過(guò)這兩個(gè)隊(duì)列來(lái)分別:
- 發(fā)送、接受、處理消息–消息隊(duì)列;
- 啟動(dòng)、結(jié)束、休眠線程–線程隊(duì)列;
Android OS中,一個(gè)進(jìn)程被創(chuàng)建之后,主線程(可理解為當(dāng)前Activity)創(chuàng)建一個(gè)消息隊(duì)列,這個(gè)消息隊(duì)列維護(hù)所有頂層應(yīng)用對(duì)象(Activities, Broadcast receivers等)以及主線程創(chuàng)建的窗口。你可以在主線程中創(chuàng)建新的線程,這些新的線程都通過(guò)Handler與主線程進(jìn)行通信。通信通過(guò)新線程調(diào)用 Handler的post()方法和sendMessage()方法實(shí)現(xiàn),分別對(duì)應(yīng)功能:
- post() 將一個(gè)線程加入線程隊(duì)列;
- sendMessage() 發(fā)送一個(gè)消息對(duì)象到消息隊(duì)列;
當(dāng)然,post()方法還有一些變體,比如postDelayed()、postAtTime()分別用來(lái)延遲發(fā)送、定時(shí)發(fā)送;
消息的處理,在主線程的Handler對(duì)象中進(jìn)行;具體處理過(guò)程,需要在new Handler對(duì)象時(shí)使用匿名內(nèi)部類重寫Handler的handleMessage(Message msg)方法;
從消息隊(duì)列中獲取消息。
線程加入線程隊(duì)列可以在主線程中也可以在子線程中進(jìn)行,但都要通過(guò)主線程的Handler對(duì)象調(diào)用post()。