1.Handler在Activity中創(chuàng)建便運行在UI線程中,此時可以進行UI操作。
Handler mHandler1 =new Handler();
2.Handler可以使用HandlerThread創(chuàng)建,需要注意的是,當handlerThread.start()后才能調用handlerThread.getLooper(),不然會有空指針異常。而此時的Handler則運行在HandlerThread線程中,不能進行UI操作,但可以進行異步操作。
HandlerThread handlerThread =new HandlerThread("Main4Activity");
handlerThread.start();
Handler mHandler2 =new Handler(handlerThread.getLooper());
3.可以在一個子線程中去創(chuàng)建一個Handler,然后使用這個handler實例在任何其他線程中發(fā)送消息,最終處理消息的代碼都會在你創(chuàng)建Handler實例的線程中運行。
Thread thread =new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
Handler mHandler3 =new Handler();
mHandler3.post(new Runnable() {
@Override
public void run() {
Log.e("mHandler3 : ",Thread.currentThread().getId()+"");
}
});
}
});
thread.start();
相關博文
Android 異步消息處理機制 讓你深入理解 Looper、Handler、Message三者關系 ?
Looper主要作用:
1、與當前線程綁定,保證一個線程只會有一個Looper實例,同時一個Looper實例也只有一個MessageQueue。
2、loop()方法,不斷從MessageQueue中去取消息,交給消息的target屬性的dispatchMessage去處理。