1. 程式人生 > >基礎篇——Handler非同步回撥機制

基礎篇——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所在的執行緒)