2019独角兽企业重金招聘Python工程师标准>>>

在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制。Message Queue(消息队列), 线程间的通信可以通过Message Queue、Handler和Looper进行信息交换。下面将对它们进行逐一介绍:

1. Message

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

2. Handler

Handler处理者,是Message的主要处理者,负责Message的发送,Message内容的执行处理。后台线程就是通过传进来的 Handler对象引用来sendMessage(Message)。而使用Handler,需要implement 该类的 handleMessage(Message)方法,它是处理这些Message的操作内容,例如Update UI。通常需要子类化Handler来实现handleMessage方法。

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。

转载于:https://my.oschina.net/u/2971691/blog/801693

Message、Handler、Message Queue、Looper之间的关系相关推荐

  1. Message、Handler、Message Queue、Looper、Thread之间的关系(未完成)

    1. 请解释下在单线程模型中Message.Handler.Message Queue.Looper.Thread之间的关系 2. 什么是IntentService?有何优点? 1) 它是对单线程消息 ...

  2. 正确理解 AsyncTask,Looper,Handler三者之间的关系(基于android 4.0)

    Looper 和Handler 是理解好AsyncTask的一个基础,我们可以先从这里开始,先给出一个主线程和子线程互相通信的例子. 1 package com.example.loopertest; ...

  3. 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )

    文章目录 I . Handler 机制简介 II . Handler 机制 Handler Message Looper MessageQueue 四组件对应关系 III . Handler ( 消息 ...

  4. Android -- 消息处理机制源码分析(Looper,Handler,Message)

    android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...

  5. android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种helper类,对于和我一样渴望水平得到进阶的人来说,都太值得一读了.这不,前几天为了了解android ...

  6. 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message

    原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...

  7. 【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )

    文章目录 一.Message 消息 二.ThreadLocal 线程本地变量 三.Looper 中的消息队列 MessageQueue 一.Message 消息 模仿 Android 中的 Messa ...

  8. android的消息处理机制(图文+源码分析)—Looper/Handler/Message[转]

    from:http://www.jb51.net/article/33514.htm 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设计思想.andro ...

  9. Android Handler处理机制 ( 三 ) ——Handler,Message,Looper,MessageQueue

    在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handle ...

最新文章

  1. 查看ngnix使用的php.ini位置_修改Nginx php.ini文件的经典教程
  2. python 爬预警没解析前的
  3. spark streaming 入门例子
  4. android apk获取权限,Android apk 获取系统权限的方式
  5. android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用
  6. 聊一聊社交网络的逻辑、产品和未来
  7. securecrt是什么工具_拥有这些工具,还怕干不出好活?
  8. Android开发线程池管理类之ThreadPoolExecutor工具类
  9. html div初始隐藏点击可见_3种CSS3移动手机隐藏菜单UI界面代码解析/附源码下载...
  10. 主流平台应用与游戏的编程语言/工具(图)
  11. 【转】DevOps到底是什么意思?
  12. AI算法连载19:统计之最大熵算法
  13. 线程打印_经典面试题——两个线程交替打印奇数和偶数
  14. 2013阿里技术嘉年华:阿里数据同步前世今生
  15. poj 2181 jumping cows
  16. 一般将来时语法课教案_初中英语笔试教案模板
  17. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法
  18. python 类 super_python的类的super()
  19. 【干货】ArcGIS自动生成拓扑并导出拓扑错误
  20. 使用Diskgenius将U盘分区,分为启动盘和文件存储两大功能详解

热门文章

  1. Linux操作系统中内存buffer和cache的区别
  2. Apache服务器下使用 ab 命令进行压力测试
  3. RHEL5上配置VNCSERVER
  4. C#中读取数据库中Image数据
  5. 小波矩特征提取matlab代码
  6. Qt中文手册 之 QHeaderView
  7. 凸透镜成像实验软件_中考物理凸透镜成像难点解析
  8. linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
  9. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  10. java 路径中文问题_Java 路径问题解决方案汇集