close

要搞清楚Android Multithread,還是等花心思搞清楚 上面提到幾個名詞

首先Thread是最外層

所有上面提到的Handler, Looper, Message Queue 包含在裡面

一個Thread 可以擁有多個Handler, 但只會有一個Looper, 一個MessageQueue

 

Android在後續版本規定所有Handler建議Base on Thread中的 Looper 

宣告方式如下

handler1 = Handler(Looper.myLooper()!!, Handler.Callback {
    //Your code here
    true
})

而Message Queue在Thread中扮演的角色說穿了就是個Queue

當有個任務(Message)存進來時, 會經由Hander 去接收 如下

looperThread.handler1?.sendMessage(m1)
looperThread.handler2?.sendMessage(m2)

在一開始我們便知道這些Message應該交由哪個Handler處理, 

但同時間只能有一個Hander進行,所以尚未完成的就會丟進Message Queue進行排程

等到目前的Message完成後, Looper就會再找下一個再Queue裡的Message並丟給對應的Handler進行處理

 

Message是預定要存的任務, 可以put String 等等存值進去給Handler進行判斷

而Runnable 則是要做的行為, 也可以包給Handler進行處理

 

 

 

arrow
arrow
    全站熱搜

    蔥哥 發表在 痞客邦 留言(0) 人氣()