Handler的理解和使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoyaosheng19/article/details/89304518

一、Handler简介
Handler是android给我们提供的用来更新UI(User InterFace)的一套机制,也是一套信息处理机制,我们可以通过他发送消息和处理消息

为什么要是使用handler?
其在设计的时候,就封装了一套信息创建、传递和处理的机制,如果不遵守这种机制,就会抛出异常:CalledFromWrongThreadException

二、Handler的原理
** 2-1 Looper(轮询)**
内部包含一个消息列队(MessageQueue),所有的handler发送的消息都会存储到这个队列
Lopper.looper()方法是一个死循环,不断的从MessageQueue中取消息,如果有消息就取消息,没有就阻塞
2-2 Handler封装了消息的发送(主要把消息发送给谁)**
内部会跟looper关联,也就是Handler内部可以找到looper,找到Looper也就找到了MessageQueue Handler发送消息就是向消息队列MessageQueue中发送消息
总结:Handler 负责发送消息,Looper负责接收handler发送的消息,并直接把消息回传给handler自己;
MessageQueue就是一个消息队列,存储所有Handler发送的消息
在这里插入图片描述

2-3 handler运行机制:
在这里插入图片描述

Handler机制也叫异步消息机制,主要由4个部分组成:message, MessageQueue, handler, looper.具体讲解如下:
1)Message
Message是在线程之间传递的消息,它可以在内部之间传递少量的信息,用于不同线程之间交换数据。使用message中的arg 1 和arg 2便可携带int数据,使用obj便可携带Object类型的数据。
2)Handler
顾名思义就是处理着的意思。其主要是在子线程中调用handler.sendMessage()发送消息,在UI线程调用handlerMessage()方法处理message。
3)MessageQueue
消息队列的意思,其用于存放所有通过handler.sendMessage()发送过来的消息,这些消息一直被存放在消息队列中等待被处理。每个线程只会有一个MessageQueue对象。MessageQueue底层数据结构是队列。
4)Looper
looper是每个线程中的MessageQueue的管家,调用looper.loop()方法后,looper便会将MessageQueue中消息取出传递到Handle.handleMessage().每个线程只有一个looper对象。

展开阅读全文

没有更多推荐了,返回首页