zoukankan      html  css  js  c++  java
  • Handler Message相关说明

    MessageQueue
    消息队列MessageQueue是以执行时间为序的优先级队列,先发送的消息先执行
    Message只是一段数据,里面说明了要做什么,但并不知如何做。Message放入队列后,在处理这些消息时到底怎么做?这就引入了Handler
    Hanlder
    Handler对消息队列的enqueueMessage做了包装,同时,把Message的target设成了自己,即为Message指定执行的行为,这样当前Message被处理的时候就会调用Handler的dispatchMessage,而这个函数就会调用你要实现的虚函数handlerMessage。经过消息队列转了一圈,还是调用自己实现的函数,但是同步操作变成了一步操作。
    Looper
    Message放在消息队列里,这时Looper会调用自己的loop函数一直循环处理队列中的消息,直到遇上一个没有target的Message。由此可见Looper总是和一个MessageQueue关联起来
    Thread
    loop只是一个函数,它也需要别人来执行它。由于它一执行就会阻塞在那里,所以一定需要一个线程来调用
    class LooperThread extends Thread {
    public Handler mHandler;
    public void run() {
    Looper.prepare();
    mHandler = new Handler(){
    public void handlerMessage(Message msg){

    }
    };
    Looper.loop();
    }
    }
    一个Looper也总是和一个Thread关联起来,不过不一定要创建新线程,可以是主线程的。Handler和Thread不是一一对应的,理论上,在一个LooperThread中,可以有任何多个Handler,每个消息都可以指定不同的Handler,因为每个消息都有不同的Handler,因为每个消息都可以有不同的行为。
    在创建Handler时并不会创建Thread,它只取当前线程的Looper的MessageQueue

  • 相关阅读:
    VS2010中经常使用的快捷键
    IE无法打开internet网站已终止操作的解决的方法
    Spring3.0 AOP 具体解释
    Java 反射机制[Method反射]
    软件測试自学指南---从入门到精通
    Java中Map的使用
    tracert路由跟踪命令分析判断
    C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
    ORACLE触发器具体解释
    Androidclient推断server是否开启 HttpHostException解决方式
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300643.html
Copyright © 2011-2022 走看看