Android Handler研究(1)

來源:互聯網
上載者:User

標籤:阻塞   prepare   ui線程   pip   linu   對象   執行   pipe   nat   

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)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.