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

  • 相关阅读:
    第三届NSCTF之easy ssrf
    第三届NSCTF测试题Welcome
    第三届NSCTF测试题Code php 之MD5碰撞和php strcmp函数绕过
    PUT方法提交message
    使用John the Ripper破解sha512加密的shadow文件密码
    第2章 SQL注入攻击:课时1:注入攻击原理及自己编写一个注入点
    配置IIS10支持php语言脚本
    身边的base64解码工具
    什么是JWT
    IDEA 远程调试
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300643.html
Copyright © 2011-2022 走看看