zoukankan      html  css  js  c++  java
  • 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。
    

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

     
     
    人生处处是惊喜
  • 相关阅读:
    P3368 【模板】树状数组 2
    P3374 【模板】树状数组 1
    P1631 序列合并
    P1387 最大正方形
    P1197 [JSOI2008]星球大战
    P2866 [USACO06NOV]糟糕的一天Bad Hair Day
    P1196 [NOI2002]银河英雄传说
    SP1805 HISTOGRA
    P1334 瑞瑞的木板
    2019信息学夏令营游记
  • 原文地址:https://www.cnblogs.com/ransky/p/5754327.html
Copyright © 2011-2022 走看看