认识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原理图

)

上一篇下一篇

猜你喜欢

热点阅读