Android学习笔记(38):Handler消息传递处理机制

简介:

先说为什么需要Handler

 

Android的主线程又叫UI线程,用于处理与UI相关的时间。Android只允许在主线程中修改UI组件,当我们在其他线程中需要修改UI界面时,就需要发送消息到主线程,再由主线程来处理UI的修改事件。

 

UI线程中执行耗时操作或网络操作,否则会抛出ANR (“Application Not Responding”)异常或NetworkOnMainThreadExceptionwill异常。

 

在这些时候,我们用Handler来进行消息的传递和处理。

 

下面来介绍Handler类:

1)两个主要功能:

1.在非主线程中发送消息。

2.在主线程中获取、处理消息。

 

(2)一起工作的几个组件

MessageHandler接收和处理的消息对象

Looper:每个线程有一个Looper,负责管理MessageQueue。它的loop方法不断从MessageQueue中抽取Message交给Handler处理。

MessageQueue:由Looper负责管理的消息队列,用FIFO的方式管理MessageLooper的构造器中会创建一个MessageQueue对象。

 

(3)Handler用于发送、处理Message的方法:

void handleMessage(Message msg):处理消息的方法,需要自己重写。

boolean hasMessages(int what, Object object):检查消息队列中是否包含what属性为指定值且object属性为指定对象的消息。

boolean hasMessages(int what):检查消息队列中是否包含what属性为指定值的消息。

Message obtainMessage():获取消息。

boolean sendEmptyMessage(int what):发送空消息。

boolean sendEmptyMessageAtTime(int what, long uptimeMillis):在指定的时间发送空消息。

boolean sendEmptyMessageDelayed(int what, long delayMillis):一段时间后发送空消息。

boolean sendMessage(Message msg):发送消息。

boolean sendMessageAtFrontOfQueue(Message msg):消息加入到消息队列的最前面。

boolean sendMessageAtTime(Message msg, long uptimeMillis):在指定时间发送消息。

boolean sendMessageDelayed(Message msg, long delayMillis):一段时间后发送消息。

 

(4)Handler的消息处理机制:

开发者需要重写Handler类的消息处理方法,但新启动的线程发送消息时,消息会发送到与之关联的MessageQueueHandler不断从MessageQueue中获取并处理消息,在此时调用消息处理方法。

 

(5)利用Handler处理其他线程中需要作出的UI修改:

Android系统在启动的时候会为Activity创建一个消息队列和消息循环(Looper)。为了处理非主线程中的UI处理要求,我们首先在新线程中发送消息,然后在主线程中重写HandlerhandleMessage()方法实现UI修改的要求。

目录
相关文章
|
3月前
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
【Android开发小技巧】扔掉这坑人的 Handler
40 0
|
4月前
|
Android开发 容器
[Android]View的事件分发机制(源码解析)
[Android]View的事件分发机制(源码解析)
36 0
|
4月前
|
消息中间件 缓存 安全
android开发,使用kotlin学习消息机制Handler
android开发,使用kotlin学习消息机制Handler
78 0
|
4月前
|
安全 Android开发 Kotlin
android开发,使用kotlin学习Android权限机制
android开发,使用kotlin学习Android权限机制
35 0
|
6月前
|
缓存 安全 数据库
Android学习笔记4
Android学习笔记4
25 0
|
6月前
|
XML 数据库 数据安全/隐私保护
Android学习笔记3
Android学习笔记3
112 0
|
6月前
|
XML Java Android开发
Android学习笔记2
Android学习笔记2
28 0
|
6月前
|
XML Java Linux
Android学习笔记1
Android学习笔记1
30 0
|
8月前
|
Android开发
Android 使用Alarm机制创建长时间在后台运行的定时任务
Android 使用Alarm机制创建长时间在后台运行的定时任务
158 0
|
8月前
|
Java API Android开发
Android 权限机制详解
Android 权限机制详解
72 0