1. 程式人生 > >Android Handler研究(1)

Android Handler研究(1)

oid 初始化 線程 loop hand 死循環 操作 rem 延時

a. 解決問題
  跨線程通信(UI線程)
b. 用途
  1. 延時執行message或runnable
  2. 子線程執行耗時操作
c. 原理
  Message: 消息實體
  MessageQueue: 消息隊列
  Looper: 輪詢消息隊列
d. 註意點
  1. UI線程Handler如何初始化的
  ActivityThread的static main方法中執行Looper.prepareMainLooper();
  2. 任意線程實現消息隊列
    new Thread(){

      run(){
      //1. 準備Looper對象
      Looper.prepare();
      //2. 子線程創建Handler
      handler = new Handler(){
        handlerMessage(){
        }
      }
      //3. 輪詢方法
      Lopper.loop();
      }

    }.start();  

3. 為什麽主線程不會因為Looper.loop()死循環卡死?
  利用Linux管道(Pipe/epoll),簡單說就是在主線程的MessageQueue沒有消息時,便阻塞在loop的messageQueue.next()中的nativePollOnce()方法裏.
  所以說,主線程大多數時候處於休眠狀態,不會消耗大量cpu資源

Android Handler研究(1)