Android學習筆記(十三) Handler

來源:互聯網
上載者:User

標籤:bsp   修改   繼承   學習筆記   控制項   alt   android   string   class   

可用於解決上一則筆記所提到的WorkerThread無法修改UI控制項的問題

一、Handler、Looper和MessageQueue的基本原理

  Handler把訊息對象放到MessageQueue當中,而Looper負責在訊息佇列頭部不斷取出訊息對象。取出的對象再交給Handler處理。

二、一個簡單的Handler例子

  -先建立一個繼承Handler的類,注意是匯入Android.os.Handler(非常重要)
    class firstHandler extends Handler{}

  -複寫方法handleMessage(Message msg)

  -建立Handler對象
    handler = firstHandler()

  -產生一個Message,並且給what成員變數賦值
    Message msg = handler.obtainMessage();
    msg.what = 2;

  -將訊息對象放置到訊息佇列中。
    handler.sendMessage(msg);

  -Looper將會從訊息佇列當中將訊息對象取出;
  -Looper將會找到與訊息對象對應的Handler對接(每一個Message對象都有與之對應的Handler對象);
  -Looper將會調用Handler對象的handleMessage(Message msg)方法,用於處理訊息對象。

三、在主線程當中實現Haandler的handleMessage()方法

  註:不管是在WorkerThread還是在MainThread中都可以發送訊息,即:handler.sendMessage(Message msg)

  1)在建立線程的run()中發送Message:

    class NetworkThread extends Thread{        @Override        public void run(){            String s = "類比從網路中擷取的資料";            Message msg = handler.obtainMessage();            msg.obj = s;            handler.sendMessage(msg);            }    }                    

  2)複寫handleMessage()方法。因為這個方法是被主線程調用的,所可以更改UI。

class MyHandler extends Handler{    @Override    public void handleMessage(Message msg){        tring s = (String)msg.obj;        textView.setText(s);    }}

 

Android學習筆記(十三) Handler

聯繫我們

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