认识Handler
2017-02-23 本文已影响0人
BridgeXD
一、ThreadLocal 实现不同线程的数据副本
ThreadLocal<String> mThreadLocal=new ThreadLocal<String>();
保持几个线程的对同一数据操作相互独立,不受干扰
二、Looper、线程、消息队列的关系
Looper.prepare();
sThreadLocal.set(new Looper(quitAllowed));
一个Looper对应了一个消息队列,和一个线程(消息轮训)
不同的子线程就有不同的Looper,放到中ThredLocal中;
三、消息发送与处理过程
1、消息入队
post()
postAtTime()
postDelay()
postAtFrontOfQueue()
*sendMessageAtTime(Message msg,long uptimeMillis)
enqueueMessage(MessageQueue queue,Message msg,long time)
msg.target=this;
(1、当前的Handler对象 消息来源,2、谁处理,哪个handler发出哪个处理)
return queue.enqueueMessage(msg,time);
2、消息出队
Looper.loop();
从Threadlocal中get出looper ,从looper中取出MessageQueue
queue.next();从消息队列中取出消息
msg.target.dispatchMessage(msg);发送给对应的消息队列
3、消息的处理
dispatchMessage(msg);
handlerMessage();必须由子类实现
Handler的工作机制
Thread:负责业务逻辑
Handler:负责发送消息和处理消息
MessageQueue:负责保存消息
Looper:负责轮询消息队列 如果没有消息进入阻塞状态
handler原理图
)