Saturday, June 19, 2010

Looper和Handler,有如劉備需孔明,孔明也需劉備

之前一直在當柯南,試圖查明Message和Looper、Handler的這段三角關係,什麼時候要用Message,什麼時候還要再多加Looper,Handler又是要幹嘛的?後來看了高煥堂先生第3本著作:物件導向技術與執行緒模式(第三版),才終於知道Looper和Message是連體嬰的關係,
只有不斷的Looper,副執行緒才能不斷的丟出Message,
若沒有Looper,就只會丟僅一次的Message。

而且,Looper的相關功能通常都放在Thread的run()方法中,如下:
public subThread implements Runnalbe{
       public void run(){
            Looper.prepare();
               //程式區塊(譬如像在這裡寫handler.sendMessage(Message);指令)
        Looper.loop();
            }

這兩行method很關鍵,要重複丟出Message,程式碼就要被包含在這2個method當中。

註:如果啟動了Looper,當run()結束時,Thread也不會dead

1 comment:

Anonymous said...

run()結束並不能跟Thread會dead畫上等號吧...:) Looper的說明也似乎幫助不大~~