关键对象: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