異步消息處理機制


異步消息處理機制主要由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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM