Message、Handler、Message Queue、Looper之间的关系
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之间的关系相关推荐
- Message、Handler、Message Queue、Looper、Thread之间的关系(未完成)
1. 请解释下在单线程模型中Message.Handler.Message Queue.Looper.Thread之间的关系 2. 什么是IntentService?有何优点? 1) 它是对单线程消息 ...
- 正确理解 AsyncTask,Looper,Handler三者之间的关系(基于android 4.0)
Looper 和Handler 是理解好AsyncTask的一个基础,我们可以先从这里开始,先给出一个主线程和子线程互相通信的例子. 1 package com.example.loopertest; ...
- 【Android】Handler 机制 ( Handler | Message | Looper | MessageQueue )
文章目录 I . Handler 机制简介 II . Handler 机制 Handler Message Looper MessageQueue 四组件对应关系 III . Handler ( 消息 ...
- Android -- 消息处理机制源码分析(Looper,Handler,Message)
android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道,因 ...
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
android源码中包含了大量的设计模式,除此以外,android sdk还精心为我们设计了各种helper类,对于和我一样渴望水平得到进阶的人来说,都太值得一读了.这不,前几天为了了解android ...
- 【转】android的消息处理机制(图+源码分析)——Looper,Handler,Message
原文地址:http://www.cnblogs.com/codingmyworld/archive/2011/09/12/2174255.html#!comments 作为一个大三的预备程序员,我学习 ...
- 【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )
文章目录 一.Message 消息 二.ThreadLocal 线程本地变量 三.Looper 中的消息队列 MessageQueue 一.Message 消息 模仿 Android 中的 Messa ...
- android的消息处理机制(图文+源码分析)—Looper/Handler/Message[转]
from:http://www.jb51.net/article/33514.htm 作为一个大三的预备程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设计思想.andro ...
- Android Handler处理机制 ( 三 ) ——Handler,Message,Looper,MessageQueue
在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handle ...
最新文章
- 查看ngnix使用的php.ini位置_修改Nginx php.ini文件的经典教程
- python 爬预警没解析前的
- spark streaming 入门例子
- android apk获取权限,Android apk 获取系统权限的方式
- android自带的nsd发现服务器,Android网络服务发现(NSD)协议的使用
- 聊一聊社交网络的逻辑、产品和未来
- securecrt是什么工具_拥有这些工具,还怕干不出好活?
- Android开发线程池管理类之ThreadPoolExecutor工具类
- html div初始隐藏点击可见_3种CSS3移动手机隐藏菜单UI界面代码解析/附源码下载...
- 主流平台应用与游戏的编程语言/工具(图)
- 【转】DevOps到底是什么意思?
- AI算法连载19:统计之最大熵算法
- 线程打印_经典面试题——两个线程交替打印奇数和偶数
- 2013阿里技术嘉年华:阿里数据同步前世今生
- poj 2181 jumping cows
- 一般将来时语法课教案_初中英语笔试教案模板
- OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法
- python 类 super_python的类的super()
- 【干货】ArcGIS自动生成拓扑并导出拓扑错误
- 使用Diskgenius将U盘分区,分为启动盘和文件存储两大功能详解
热门文章
- Linux操作系统中内存buffer和cache的区别
- Apache服务器下使用 ab 命令进行压力测试
- RHEL5上配置VNCSERVER
- C#中读取数据库中Image数据
- 小波矩特征提取matlab代码
- Qt中文手册 之 QHeaderView
- 凸透镜成像实验软件_中考物理凸透镜成像难点解析
- linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
- vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
- java 路径中文问题_Java 路径问题解决方案汇集