Android handler机制

原创
2016/12/19 12:19
阅读数 88

关键对象:Handler,Looper,Message,MessageQueue

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;
            }

        }
    };
2 在异步线程里面发送消息(比如handler.sendEmptyMessage(1))。

handler原理(和我以前做游戏消息分发原理相似):

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执行。

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部