handler提供異步處理的功能,發送和接收不是同時進行的java
handler是android操做系統的線程通信工具android
做用:(1)安排消息或runable 在主線程中某個地方執行(2)安排一個動做在另一個線程中執行異步
維護兩個隊列:(1)消息隊列:發送、接受、處理消息 (2)Runable隊列:啓動、結束、休眠線程工具
使用的步驟:(1)建立handler對象 (2)建立runable 和消息 (3)調用post或sendMessage方法將runable和消息添加到隊列。oop
一.關於runable隊列(android 線程異步處理機制 post()---------------)post
handler維護一個線程隊列,當向隊列發送一個runable後,馬上返回,並不理會runable是否被執行 ui
方法:spa
1.mHandler.post(Runable) 直接加入到線程隊列操作系統
2.mHandler. postDelayed(Runable,long); 延遲一段時間,將runable 加入隊列線程
3.mHandler.postAtTime(Runable,long) 定時加入線程隊列
4.mHandler.removeCallback (Runable)
2、消息隊列 (anddroid 消息異步處理機制 sendMessage() -------------- handlerMessage())
1.初始化 Message msg = mHandler.obtainMessage(); 消息對象
2.加入數據 msg.setData(Bundle bundle) Bundle對象
3.取出數據 msg.getData()
發送到消息隊列方法
1.mHandler.sendMessage(Message)
2.msg.sendToTarget();
3.mHandler.sendMessageDelayed(Message,long)
4.mHandler.senMessageAtTime(Message,long)
處理消息的的方法
Hander mHandler = new Handler(){ public void handleMessage(Message msg){ } };
3、handler的兩個做用
安排消息或runnable 在某個主線程中某個地方執行
Handler mHandler = new Handler(); mHandler.post(new Runnable{});
2.安排一個動做在另一個線程中執行
new Thread{ public void run{ mHandle.post(new Runnable); } }
4、Looper
1. Looper實際上就是消息隊列+消息循環
2.,Handler能夠看作是Looper的接口,用來向指定的Looper發送消息以及定義處理方法。默認狀況下Handler會與其所在線程的Looper綁定
方法:
1. Looper.prepare();啓用looper
2.Looper.loop() 讓looper開始工做
3.mHandler.getLooper().quit() 中止looper
3.Handler異步的實現
Handler是經過HandlerThread 使得子線程與主線程分屬不一樣線程的。實際上,HandlerThread 是一個特殊的線程,它是一個封裝好Looper的線程
這樣,就實現了handler的異步處理機制,在調用handler.post()方法,經過打印線程ID能夠得知,子線程與主線程是分屬不一樣線程的
參考文章 :