Handler相关概念简介
2017-08-16 00:07
211 查看
Handler
Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理。 这种机制通常用来处理相对耗时比较长的操作。特点
1. 传递Message。用于接受子线程发送的数据, 并用此数据配合主线程更新UI。
在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的消息队列中。
类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法来接收Message并进行相关操作。
2. 传递Runnable对象。用于通过Handler绑定的消息队列,安排不同操作的执行顺序。
Handler对象在进行初始化的时候,会默认的自动绑定消息队列。利用类post方法,可以将Runnable对象发送到消息队列中,按照队列的机制按顺序执行不同的Runnable对象中的run方法。
Message
Message是在线程之间传递的信息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。例如Message的what字段来验证消息,arg1和arg2字段来携带一些整型数据,使用obj字段携带一个object对象。MessageQueue
MessageQueue是消息队列的意思,它主要用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程中只有一个MessageQueue对象。Looper
Looper是每个线程中的MessageQueue的管家,调用Looper的loop()方法后,就会进入到一个无限循环当中,然后每当发现MessageQueue中存在一条消息,就会将它取出,并传递到Handler的handleMessage()方法中。每个线程中也只有一个Looper对象。异步消息处理的流程
首先需要在主线程当中创建一个Handler对象,并重写handleMessage()方法。然后当子线程中需要进行UI操作时,就创建一个Message对象,并通过Handler将这条消息发送出去。之后这条消息会被添加到MessageQueue到队列中等待被处理,而Looper则会一直尝试从MessageQueue中取出待处理消息,最后分发回Handler的handleMessage()方法中。由于Handler是在主线程中创建的,所以此时handleMessage()方法中的代码也会在主线程中运行,于是我们在这里就可以安心地进行UI操作了。整个异步消息处理机制的流程示意图如图所示。相关文章推荐
- 深度学习_简介及相关概念
- XGBoost简介---相关概念、原理
- 转:WebService相关概念简介
- Git分支及其相关概念和命令简介
- 网络相关概念简介
- SQLserver学习day01 SQLserver简介 数据库的相关概念 创建删除数据库操作
- LMS/LCMS相关概念简介
- Storm(一)Storm的简介与相关概念
- shell简介及变量、脚本相关概念
- SAS技术简介(相关概念)
- Solr相关概念详解:SolrRequestHandler
- css简介及相关概念
- 第四章输入/输出(I/O)4.1I/O涉及的设备及相关概念简介
- Oracle表的相关概念简介
- android Fragment相关概念简介
- 虚拟化相关概念与技术整理(2)——硬件辅助虚拟化简介
- JSP基础(一)--相关基本概念和常见Web服务器简介
- Solr相关概念详解:SolrRequestHandler
- MySQL分区(partition)相关概念
- Web服务(Web service)基础及相关术语简介