1.组成部分
Handler,Looper,MessageQueue,Message
2.工作原理
Handler发送消息到MessageQueue,Looper通过循环从消息队列中获取消息之后传给Handler,Handler接收消息之后开始处理
3.联系
在启动应用创建主线程的时间创建了Handler,在Handler的构造函数中创建了Looper,Looper创建了MessageQueue,MessageQueue负责管理Message
4.细节
在子线程中使用Handler的话需要自己创建Looper和MessageQueue,因为子线程本身是不存在Looper的
调用Looper.prepare,Looper.loop即可
Handler通过sendMessage发送消息的时间,MessageQueue通过enqueueMessage方法把消息存入容器
每个线程最多一个Looper,一个Looper对应一个MessageQueue,可以对应多个Handler
5.在子线程使用Handler
1.创建Handler,2.创建Looper和MessageQueue 3.Handler在创建Handler的线程中运行,所以我们要注意是否是子线程中创建的
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
6.在主线程更新UI的方法
1.runOnUIThread
2.view.post
3.view.postDelay
4.Handler(确定是主线程的Handler)
网友评论