Handler机制
来源:互联网 发布:u盘做linux启动盘 编辑:程序博客网 时间:2024/06/15 12:40
今天我们来说一说Handler机制。
首先Handler主要用于异步消息的处理:党发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接受消息不是同步处理。这种机制通常处理一些相对耗时比较长的操作。
Handler机制中主要有以下四个:
Looper轮循器:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
Handler:你可以创建一个Handler对象来与Looper沟通,以便推送新消息到MessageQueue里,或者接受Lopper从Message Queue取出所送来的消息。
Message Queue(消息队列):就是一个用来存放线程放入的先进先出的队列。
线程:UIthread 通常就是main thread,而Android启动程序时会替他建立一个MessageQueue。
主要有三个步骤:
1.1Handler创建消息
handler创建消息每一个消息都需要被指定的Handler处理,通过Handler创建消息便可以完成此功能。Android消息机制中引入了消息池。Handler创建消息时首先查询消息池中是否有消息存在,如果有直接从消息池中取得,如果没有则重新初始化一个消息实例。使用消息池的好处是:消息不被使用时,并不作为垃圾回收,而是放入消息池,可供下次Handler创建消息时使用。消息池提高了消息对象的复用,减少系统垃圾回收的次数。消息的创建流程如图所示。
1.2Handler发送消息
handler发送消息UI主线程初始化第一个Handler时会通过ThreadLocal创建一个Looper,该Looper与UI主线程一一对应。使用ThreadLocal的目的是保证每一个线程只创建唯一一个Looper。之后其他Handler初始化的时候直接获取第一个Handler创建的Looper。Looper初始化的时候会创建一个消息队列MessageQueue。至此,主线程、消息循环、消息队列之间的关系是1:1:1。Handler、Looper、MessageQueue的初始化流程如图所示:Hander持有对UI主线程消息队列MessageQueue和消息循环Looper的引用,子线程可以通过Handler将消息发送到UI线程的消息队列MessageQueue中。
1.3Handler处理消息
handler处理消息UI主线程通过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息从消息队列中取出。首先分析消息,通过消息的参数判断该消息对应的Handler,然后将消息分发到指定的Handler进行。
- Handler机制
- Handler机制
- handler机制
- handler机制
- Handler机制
- Handler机制
- handler机制
- Handler机制
- handler机制
- Handler机制
- handler机制
- Handler机制
- Handler机制
- Handler机制
- handler机制
- handler机制
- Handler机制
- Handler机制
- 《C++ Concurrency in Action》笔记4 hardware_concurrency()
- Linux系统下FTP服务器的搭建
- 九度题目1156:谁是你的潜在朋友
- android实现和web一样的圆角
- 无限轮播+GridView
- Handler机制
- word中的修订的使用
- 数据结构-双向循环链表
- jQuery DOM 元素方法
- CS229机器学习个人笔记(2)——Linear Regression with Multiple Variables
- Palindrome Linked List 回文链表
- QT渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- 实现XlistView的简洁方法PullToRefreshListView
- ViewPager无限轮播+圆点+GridView数据展示