Win32視窗訊息機制 x Android訊息機制 x 非同步執行

來源:互聯網
上載者:User

標籤:發送   public   視圖   bsp   win32   override   查看   handle   roi   

如果你開發過Win32視窗程序,那麼當你看到android代碼到處都有的mHandler.sendEmptyMessage和

private final Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            switch (msg.what) {                case MSG_REPORT_PRIMARY_CLIP_CHANGED:                    reportPrimaryClipChanged();            }        }    };

不禁歎出,這不就是視窗訊息機制嗎?只是不關視窗的事了,然後分離出來訊息機制。
sendMessage這個函數,我們查看視窗屬性,改變視窗屬性,通知視窗發生事件一切的一切彷彿都在調用這個函數。
WinProc這個訊息處理函數,即使你在android的java代碼裡換了個名handleMessage,我們就認不出你來了嗎?
就連Message也同樣是一個整形,同時攜帶兩整形參數(windows視窗訊息c代碼中可以放指標,android訊息java代碼另外還有Bundle,
Object引用參數,因為int不可以轉換對象引用)

這樣就很容易理解了:
在windows中,向一個視窗發送視窗訊息,實質就是向建立視窗所在的線程的訊息佇列發送視窗訊息,或阻塞等待處理或不阻塞。
在android中,向一個Handler發送訊息,同樣是在向這個Handler關聯的線程的訊息佇列發送訊息,並且不阻塞不等待處理。
在Win32視窗訊息機制,訊息在訊息迴圈中指派。
在android中,Looper封裝了這個訊息迴圈以及訊息佇列,並線上程的TLS中存放其引用(指標),對於線程唯一存在。如果在執行個體
Handler時不指明Looper預設借用當前線程的Looper。Handler關聯某一個Looper,一個Looper唯一關聯一條線程。向Handler發送訊息
就是向Looper的訊息佇列發送(入隊)訊息,線程必須執行Looper.loop訊息迴圈,訊息才能指派。

要注意就是:
視窗在Windows系統是系統範圍的,我們可以利用視窗訊息進行進程間通訊。而android的Handler卻不是。
視窗在Windows系統在建立它的線程上處理訊息,任何線程都可以建立視窗。而android的視窗(視圖)只能在主線程建立和訪問。
在android的訊息機制中,還可以發送一個Runnable到某一線程的訊息迴圈中執行,這點就仿如iOS的GCD中的dispatch_async代碼塊。

參看原始碼:

public void dispatchMessage(Message msg) {        if (msg.callback != null) {            handleCallback(msg);        } else {            if (mCallback != null) {                if (mCallback.handleMessage(msg)) {                    return;                }            }            handleMessage(msg);        }    }

Java非同步線程執行代碼塊:

mHandler.post(new Runnable() {     public void run() {     // ....     }});

OC非同步線程執行代碼塊:

dispatch_async(global_queue, ^{     // ....     });

 

Win32視窗訊息機制 x Android訊息機制 x 非同步執行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.