android intent 及自訂訊息傳遞

來源:互聯網
上載者:User

1,android自訂訊息。

Looper,MessageQueue,Message,Handler

1, 先看下這幾個類的關係,MessageQueue是一個包含了Message的隊列。一個Looper中包含有一個MessageQueue, Message中有對Handler(訊息的處理者)的引用。

2,一個android的主線程中有且僅有一個Looper,當程式啟動時這個looper就開始不斷的從MessageQueue裡取出訊息來進行處理。應該是一個while的迴圈。

當沒有訊息時,messageQueue.next()就處於阻塞狀態,直到有新的訊息取出。

3,新開一個線程是預設是沒有Looper的。但是也可以給它加一個Looper,有了Looper這個線程就可以進行訊息處理了。

4,在同一個app中,其它線程可以取的主線程的Looper,這樣就可以實現子線程和主線程之間的通訊。

 

Looper.loop();方法的源碼,當執行這個時就進入了訊息迴圈。

public static final void loop() {

        Looper me = myLooper();
        MessageQueue queue = me.mQueue;
        while (true) {
            Message msg = queue.next(); // might block
            //if (!me.mRun) {
            //    break;
            //}
            if (msg != null) {
                if (msg.target == null) {
                    // No target is a magic identifier for the quit message.
                    return;
                }
                if (me.mLogging!= null) me.mLogging.println(
                        ">>>>> Dispatching to " + msg.target + " "
                        + msg.callback + ": " + msg.what
                        );
                msg.target.dispatchMessage(msg);
                if (me.mLogging!= null) me.mLogging.println(
                        "<<<<< Finished to    " + msg.target + " "
                        + msg.callback);
                msg.recycle();
            }
        }
    }

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.