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

相关文章
相关标签/搜索