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

  • 相关阅读:
    redis如何实现数据同步
    mysql调优学习笔记
    介绍一个好用的dao层与mybatis互跳的idea插件MyBatisCodeHelperPro
    springboot执行流程
    zookeeper
    (原创) cocos2dx使用Curl连接网络(客户端)
    (转) Eclipse连接MySQL数据库(傻瓜篇)
    (原创)cocos2dx使用jsoncpp的正确姿势
    Java web开发(17)SpirngMVC 详解
    PLC 程序和仿真
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300643.html
Copyright © 2011-2022 走看看