異步消息處理機制主要由Message,Handler,MessageQueue和Looper這四部分組成
1.Message是在線程之間傳遞的消息,它可以在內部攜帶少量的信息,用於在不同線程之間交換數據
2.Handler是處理者的意思,它主要用於發送和處理消息,發送消息通過Handler的sendMessage()方法,發出的消息最終會被傳遞到Handler的handleMessage()方法中
3.MessageQueue是消息隊列,用來存放Handler發送的消息,這些消息一直存放在消息隊列中等待被處理,每個線程只有一個MessageQueue對象
4.Looper是專門來從MessageQueue中取出消息的,調用Looper的loop()方法后,就會不斷的從消息隊列中取出消息傳遞到Handler的handleMessage()方法中,而每個線程中也只有一個Looper對象
示例代碼如下:
//用來標記Handler消息的常量 public static final int UPDATE_TEXT = 1; //首先需要在主線程創建一個Handler的子類對象, //子類還需要重寫Handler的handleMessage()方法 private Handler handler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case UPDATE_TEXT: // 在這里可以進行UI操作 text.setText("Hello World"); break; default: break; } } } //然后需要在子線程中創建一個Message對象 ... new Thread(new Runnable() { @Override public void run() { Message message = handler.obtainMessage(); message.what = UPDATE_TEXT; handler.sendMessage(message); // 將Message對象發送出去 } }).start(); 注意:上面為什么用的是handler.obtainMessage()而不是new Message(), 這里面差別其實並不大,只是前者是從消息池中拿來一個msg,不需要重新new,節省了一點內存空間
這樣一個簡單的異步消息處理機制就完成了,
為了更加使我們更方便的在子線程中對 UI 進行更新, Android還提供了AsyncTask。借助 AsyncTask,即使對異步消息處理機制完全不了解,
也可以容易地從子線程切換到主線程。當然,AsyncTask的實現原理也是基於異步消息處理機制的,
只不過Android工程師們幫我們做了很好的封裝而已,想了解使用Asynctask的相關知識請看這篇文章
http://www.cnblogs.com/cxsy/p/5608334.html