Android不允许在子线程中进行UI的操作,但是有些时候我们确实需要在子线程中执行一些耗时的任务来更新UI,这时候就需要用到解析异步消息处理机制来完成操作。
异步消息处理包括:
- Message
- Handler
- MessageQueue
- Looper
该文章主要介绍Message和Handler
Message
在线程之间传递信息,将少量的信息在不同的线程之间交换。(发送给Handler)
Message类:
public final class Message implements Parcelable {
public int what;
public int arg1;
public int arg2;
public Object obj;
...
}
在该类中,有一项成员变量为what,其中what标志的消息会让接收者知道改小子是关于什么的。
Handler
消息处理者,它主要用于发送和处理消息。
- sendMessage() 发送消息
- handleMessage() 处理消息(需要通过重写Handler类中的handleMessage()方法来实现具体的处理逻辑)
举个例子
就拿在子线程中更新UI的错误来说(android不被允许在子线程中更新UI,必须在主线程中进行UI更新)
比如已经写好了一个布局
- xml布局文件:(在该文件的最中央定义了一句话,在布局顶部定义了一个按钮,我们希望通过点击按钮更改布局中央的文字,本来接下来只需要在主活动中为该按钮设计一个监听,在点击按钮后开启一个线程来更新文字即可,但这样做是不安全的,需要通过异步消息处理来完成)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height

Android禁止在子线程更新UI,但可以通过异步消息处理机制,包括Message、Handler、MessageQueue和Looper来实现。本文聚焦于Message和Handler,Message用于线程间传递信息,Handler作为消息处理者,负责发送和处理消息。举例说明如何在子线程中通过Handler更新主线程的UI。
最低0.47元/天 解锁文章
1740

被折叠的 条评论
为什么被折叠?



