Handler類被用來註冊到一個線程中,這樣能夠提供一個簡單的通訊渠道,用來發送數據到這個線程。
可做爲UI線程與後臺線程交互的幾種方法之一。html
隊列action在其餘線程上被執行;android
looper 主要功能是爲特定單一線程運行一個消息環。ide
通常狀況下,在一個線程建立時他自己是不會產生他特定單一的looper的(主線程是個例外)。所以咱們須要手動的把一個looper與線程相關聯。其方法只需在須要關聯的looper的線程中調用Looper.prepare。以後咱們再調用Looper.loop啓動looper。
以下例子:函數
class NetWorkThread implements Runnable { public MyHandler mHandler =new MyHandler(); @Override public void run() { Looper.prepare(); //mHandler =new MyHandler(); Looper.loop(); } }
message,雖然咱們能夠本身建立一個新的message,可是更加推薦的是調用handler的obtainMessage方法來獲取一個message。這個方法的做用是從系統的消息池中取出一個message,這樣就能夠避免message建立和銷燬帶來的資源浪費了。oop
實例代碼線程
NetWorkThread mNetWorkThread =new NetWorkThread(); new Thread(mNetWorkThread).start(); Message msg = mNetWorkThread.mHandler.obtainMessage(); msg.arg1=12; mNetWorkThread.mHandler.sendMessage(msg);
Message的使用樣例設計
Message message = Message.obtain(); message.arg1 = 1; message.arg2 = 2; message.obj = "Demo"; message.what = 3; Bundle bundleData = new Bundle(); bundleData.putString("Name", "Lucy"); message.setData(bundleData);
Message能夠經過new Message構造來建立一個新的Message,可是這種方式很很差,不建議使用。最好使用Message.obtain()來獲取Message實例,它從消息池獲取。code