基礎篇——Handler非同步回撥機制
寫程式碼的四點:
1.明確需求。要做什麼?
2.分析思路。要怎麼做?(1,2,3……)
3.確定步驟。每一個思路要用到哪些語句、方法和物件。
4.程式碼實現。用具體的語言程式碼將思路實現出來。
學習新技術的四點:
1.該技術是什麼?
2.該技術有什麼特點?(使用需注意的方面)
3.該技術怎麼使用?(寫Demo)
4.該技術什麼時候用?(在Project中的使用場景 )
----------------------早計劃,早準備,早完成。-------------------------
為什麼要有Handler?
1.主執行緒不能做耗時操作(例如訪問網路,資料庫操作),要放在子執行緒;
2.子執行緒又不能修改主執行緒的UI;
所以就需要用到Handler,在子執行緒處理完成後,通知主執行緒更新UI。Handler是執行緒間通訊的工具,就是用來解決執行緒和執行緒之間的通訊的。
注:主執行緒也不能修改子執行緒建立的UI。
Handler的原理:
Android中提供了一種非同步回撥機制Handler,可以在完成一個很長時間的任務後做出相應的通知。
圖解:使用Handler.sendEmptyMessage(0)傳送一個Message之後,會把Message放到MessageQueue佇列中,該佇列屬於某個Looper物件。每個Looper物件通過ThreadLocal.set(new Looper)跟一個Thread繫結在一起,該Looper物件所屬的執行緒在Looper.loop中迴圈執行獲取MessageQueue佇列中的Message物件的操作,並將Message物件交給Handler處理,呼叫Handler的dispatchMessage方法。
注:sendEmptyMessage到handlerMessage的過程,途中經過Looper.MessageQueue佇列,轉由Looper所屬的執行緒去處理,這是一個非同步的過程。(Looper所屬的執行緒可以是sendEmptyMessage所在的執行緒)