Android——Handler、Message类(UI更新——异步消息处理)

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值