Android handler機制

關鍵對象:Handler,Looper,Message,MessageQueueandroid

handler機制用於ui的異步更新。咱們沒法在非ui線程裏面修改ui元素。這點同遊戲開發是同樣的,或許是出於安全和性能方面的考慮(若是異步線程能夠對ui進行更新,那麼必需要在ui元素的更新方法上面加上同步鎖)。安全

handler使用
1首先聲明handler,在handleMessage裏面處理異步線程發送來的message異步

private Handler handler = new Handler() {
        @Override
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
                case 1:
                    break;
                default:
                    break;
            }ide

        }
    };
2 在異步線程裏面發送消息(好比handler.sendEmptyMessage(1))。oop

handler原理(和我之前作遊戲消息分發原理類似):post

a 一個handler關聯一個Looper,Looper用於消息的管理(添加和分發),注意Looper是一個ThreadLocal變量(即每一個線程分配了一個單獨的變量)
b sendMessage的時候實際上是往Looper的MessageQueue裏面添加Message。注意這個地方要加上同步處理。(message裏面要指定處理消息的target,即添加消息的handler)
c  Looper開啓了一個循環(循環體是ui主線程執行的)不斷從MessageQueue裏面獲取消息(這個地方要加上同步處理)。而後經過message的target(即handler)來分發消息,這裏是調用handler的handleMessage來處理消息的。性能

handler除了發送消息外,還能夠post runable到main thread執行。ui

相關文章
相關標籤/搜索