• Message、Handler、Message Queue、Looper 之间的关系


    单线程模型中Message、Handler、Message Queue、Looper之间的关系

    1、Message

    Message即为消息,可以理解为线程间交流的信息。处理数据后台线程需要更新UI,你可以发送Message内含一些数据给UI线程。

    2、Handler

    Handler 即为处理者,是Message的主要处理者,负责Message的发送,Message内容的执行处理。
    后台线程就是通过传进来的Handler对象引用来sendMessage(Message)。而使用Handler,需要implement该类的handleMessage(Message)
    方法。

    3、Message Queue

    Message Queue即为消息队列,用来存放通过Handler发布的消息,按照先进先出原则执行。
    每个Message Queue都会有一个对应的Handler。Handler会向Message Queue通过两种方法发送消息:
    sendMessage 或 post。这两种消息都会插在Message Queue队尾并按照先进先出原则执行。
    但通过这两种方法发送的消息执行的方式略有不同:
    通过sendMessage发送的是一个Message对象,会被Handler的handleMessage()方法处理;
    而通过post方法发送的是一个Runnable对象,则会自己执行。

    4、Looper

    Looper是每条线程里Message Queue的管家。
    Android没有Global 的Message Queue,而Android 会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。
    所以调用Looper.getMainLooper()得到的主线程的Looper不为Null, 但调用Looper.myLooper()得到当前线程的Looper就有可能为Null。
    

    借用一下别人的一个流程图。

     
     
    人生处处是惊喜
  • 相关阅读:
    编程经验
    GIS业务逻辑
    算法逻辑
    js中arguments的作用
    C#基础及记忆概念
    POI创建Excle
    数据库元数据分析Demo
    c3p0写连接池 Demo
    dbutils的使用Demo
    dbcp写连接池 Demo
  • 原文地址:https://www.cnblogs.com/ransky/p/5754327.html
Copyright © 2020-2023  润新知