美文网首页
认识Handler

认识Handler

作者: BridgeXD | 来源:发表于2017-02-23 22:25 被阅读0次

    一、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原理图

    )

    相关文章

      网友评论

          本文标题:认识Handler

          本文链接:https://www.haomeiwen.com/subject/olhiwttx.html