Handler官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Handler

Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个Handler实例都与单个线程和该线程的消息队列相关联。当创建一个新的Handler对象时,它将被绑定到创建他的线程和线程的消息队列,然后Handler将消息传递并添加到消息队列,并在消息队列中处理并执行它们。

Handler有两个主要的功能:

  • 安排消息或Runnable在某个主线程中某个地方执行;
  • 安排一个动作在不同的线程中执行。

调度消息的方法包括有:

 post(Runnable r)  将Runnable对象r添加到消息队列中
 postAtTime(Runnable r, long uptimeMillis)  将Runnable对象r添加到消息队列中,并在uptimeMillis设置的时间执行     
 postDelayed(Runnable r, long delayMillis)  将Runnable对象r添加到消息队列中,并延时delayMillis后执行
 sendEmptyMessage(int what)  发送空消息,只包含what属性
 sendMessage(Message msg)  将消息添加到正在等待的消息的队列末尾
 sendMessageAtTime(Message msg, long uptimeMillis)       在指定的时间uptimeMillis将消息添加到正在等待的消息的队列末尾
 sendMessageDelayed(Message, long)  在延时delayMillis后将消息添加到正在等待的消息的队列末尾

post方法允许将Runnable对象添加到消息队列;而sendMessage方法则将Message对象添回到消息列表,这需要你创建继承Handler的子类,并实现handlerMessage方法。无论是post还是send,当消息队列准备好后你都可以马上处理,也可以在指定时间或延时后处理。

当应用程序进程被创建后,主线程会运行一个消息队列,该消息队列负责管理顶层应用程序对象(Activity,Broadcast receiver等)以及它们创建的任何窗口。您可以创建自己的线程,并通过Handler与主应用程序线程进行通信。同样的,在创建的线程中通过post或sendMessage方法来将消息添加到消息队列,并在适当的时候处理。

Message官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Message

定义一条可以发送给Handler的消息,消息中包含消息的描述、任意的消息数据对象。Message包含两个int类型和一个Object类型扩展用于装载消息数据。虽然Message的构造方法是public的,但获取消息对象的方法最好是调用Message.obtain()或Handler.obtainMessage()方法,这两个方法会从消息对象池中获取已有的消息对象。

MessageQueue官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/MessageQueue

MessageQueue管理着一个由Looper发送的消息列表,消息不直接添加到MessageQueue,而是通过与Looper关联的Handler对象添加。你可以通过Looper.myQueue()方法获取此线程的MessageQueue对象。

Looper官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Looper

Looper类用于运行线程的消息循环。默认情况下,线程是没有关联消息循环的,当创建线程时,需要调用Looper.prepare()方法初始化消息循环,然后通过loop()循环处理消息,直至循环被停止。大多数消息循环的交互是通过Handler类实现的。

这是一个Looper线程实现的典型例子,在prepare()和loop()之间创建一个Handler来与Looper进行通信。

class LooperThread extends Thread {
public Handler mHandler; public void run() {
Looper.prepare(); mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
}; Looper.loop();
}
}

Android Handler、Message、MessageQueue和Looper官方说明的更多相关文章

  1. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper

    异步消息处理机制解析 Android中的异步消息处理主要有四个部分组成,Message.Handler.MessageQueue和Looper. 1.Message Message是在线程之间传递的消 ...

  2. 深入源代码解析Android中的Handler,Message,MessageQueue,Looper

    本文主要是对Handler和消息循环的实现原理进行源代码分析.假设不熟悉Handler能够參见博文< Android中Handler的使用>,里面对Android为何以引入Handler机 ...

  3. Android面试题 请解释下单线程模型中Message、Handler、MessageQueue、Looper之间的关系

    简单的说,Handler获取当前线程中的looper对象,looper用来存放从MessageQueue中取出的Message,再由Handler进行Message分发和处理,按照先进先出执行. Me ...

  4. android 消息系统Handler、MessageQueue、Looper源代码学习

    android消息系统 总体框架如图所看到的 在安卓的消息系统中,每一个线程有一个Looper,Looper中有一个MessageQueue,Handler向这个队列中投递Message,Looper ...

  5. 请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系

    对于面试,每个职场人士都经历过,面试官更看中你对于技术的理解是否透彻,需要知其所以然,而实际工作中看中的工作效率,都是在使用API的角度来完成任务,当在一家公司呆久了有跳槽的想法时,个人的亲身经历就是 ...

  6. Android Handler Message总结

    http://blog.csdn.net/caesardadi/article/details/8473777 当应用程序启动时,会开启一个主线程(也就是UI线程),由她来管理UI,监听用户点击,来响 ...

  7. Android Handler Message总结一下

    当应用程序启动时,会开启一个主线程(也就是UI线程).由她来管理UI.监听用户点击.来响应用户并分发事件等.所以一般在主线程中不要运行比較耗时的操作,如联网下载数据等,否则出现ANR错误.所以就将这些 ...

  8. handler message messagequeue详解

    long when 应该被处理的时间值,如果是即时发送,即为当前时间,如果是延迟发送则为当前时间+延迟时间

  9. Android Handler机制彻底梳理

    Android的消息机制其实也就是Handler相关的机制,对于它的使用应该熟之又熟了,而对于它的机制的描述在网上也一大堆[比如15年那会在网上抄了一篇https://www.cnblogs.com/ ...

随机推荐

  1. SkyWalking-netcore

    详细安装步骤:https://www.jianshu.com/p/3ddd986c7581?from=groupmessage SkyWalking-netcore 官网:https://github ...

  2. sql server 锁与事务拨云见日(上)

    一.概述 讲到sql server锁管理时,感觉它是一个大话题,因为它不但重要而且涉及的知识点很多,重点在于要掌握高并发要先要掌握锁与事务,涉及的知识点多它包括各式各样的锁,锁的组合,锁的排斥,锁延伸 ...

  3. ES6进阶之路

    1.说出至少5个ES6的新特性,并简述它们的作用. . let关键字,用于声明只在块级作用域起作用的变量. . const关键字,用于声明一个常量. . 结构赋值,一种新的变量赋值方式.常用于交换变量 ...

  4. 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名

    答曰,是为了防止用加了is前缀命名的变量造成序列化与反序列不一致的问题

  5. 高性能Mysql笔记 — 优化

    性能优化 了解查询的整个生命周期,清楚每个阶段的时间消耗情况 性能分析 慢查询日志--服务器性能分析 参考 慢查询日志是优化很重要的手段,但是开启慢查询日志对性能的影响并不大,所以可以考虑在线上打开慢 ...

  6. Java 容器源码分析之 TreeMap

    TreeMap 是一种基于红黑树实现的 Key-Value 结构.在使用集合视图在 HashMap 中迭代时,是不能保证迭代顺序的: LinkedHashMap 使用了双向链表,保证按照插入顺序或者访 ...

  7. TCP可靠数据传输

    TCP可靠数据传输   在TCP在IP不可靠的尽力而为的服务之上,创建了一条可靠数据传输服务(reliable data transfer service).TCP提供的可靠数据传输的方法涉及到可靠数 ...

  8. Perl的子程序

    子程序(subroutine) perl中的子程序其实就是自定义函数.它使用sub关键字开头,表示声明一个子程序 子程序名称有独立的名称空间,不会和其它名称冲突 Perl中的子程序中可以定义.引用.修 ...

  9. Ansible剧本介绍及使用演示(week5_day2)--技术流ken

    Ansible剧本编写说明 一. 缩进 yaml 的缩进要求比较严格.一定不能使用tab键 注意:编写yaml文件,就忘掉shell的tab吧. 二. 冒号 每个冒号后面一定要有一个空格 注意:1. ...

  10. navicat连接不上Linux服务器上的MySQL

    1.首先确定你的linux已经关闭防火墙 详细操作点这里: 如果是公司服务器防火墙比较重要不能关闭,那就麻烦点了,需要在防火墙的配置文件下配置属性. 如果还不能解决,请继续往下看. 2.如果是云服务器 ...