[ 基本使用狀況 ]

  • 畫面更新只能在主執行緒中,因此如果在其它執行緒中有需要更新畫面,那就需要回到主執行緒。
  • 從其它執行緒回到主執行緒,需使用 Handler。
  • 主執行緒(UI執行緒)不允許執行需要長時間的動作,否則會產生 ANR(Application is Not Responding),因此就要使用其它執行緒,但結果需要更新畫面,因此就要用 Handler。

[ 使用方法 ]

  • post : 傳一個 runnable 進去,因為是 runnable 所以不能帶參數
  • sendMessage : 在其它執行緒中使用 Handler 的 sendMessage() 方法,會執行 Handler 的 handleMessage() 方法
    • sendMessage() 送出 Message 物件,handleMessage() 方法可以處理 Message 物件

[ post sample ]

private Handler mHandler = new Handler()
mHandler.post(new Runnable(){
    @Override
    public void run() {
          // work
    }
});

[ sendMessage sample ]

private Handler mHandler = new Handler(){
    public void handleMessage(Message msg){
        switch(msg.what){
           case 0:
               // work
           break;
        }
    }
};

// 下面為其它執行緒,當然你要 start() 它
private Thread mThread = new Thread(new Runnable() {
    public void run() {
        Message msg = new Message();
        msg.what = 0;
        handler.sendMessage(msg);
    }
});

 


[ Reference ]

  1. Handler | Android Developers 
  2. [Android] 多執行緒-Handler和Thread的關係 (2) @ 清新下午茶 
  3. androider: Android 執行緒 - Thread 與 Handler 
  4. Life Online: 【Android】使用Handler搭配Thread 
  5. GiveMePasS's Android惡補筆記: 如何使用Thread和Handler之二(Handler的post&sendMessage差異) 
創作者介紹
創作者 jsky手札 ~ 走走停停 的頭像
jsky

jsky手札 ~ 走走停停

jsky 發表在 痞客邦 留言(0) 人氣( 430 )