2024年4月8日发(作者:)

android handler 用法

Android Handler 是 android 系统中一个重要的类,它被用于管理线程之间的通信和

消息传递。使用 Handler, 可以使线程与线程之间更容易地相互通信。下面将对 Handler

的使用方法进行详细的介绍。

一、 Handler 的概念及作用

Android 设计中,UI 线程是主线程。而非 UI 相关的操作,例如数据处理、网络通

信等操作都应该在子线程中完成,这样可以防止在主线程上执行这些操作,而导致 UI 响

应速度变慢,甚至会造成卡顿的现象。但是,就像前面提到的,非 UI 相关的操作是不能

直接更新 UI 控件的,需要在子线程中使用 Handler 发送消息,让主线程的 Handler 来

更新 UI 控件。

所以说,Handler 的主要作用是通过消息传递机制,完成不同线程之间的信息传递及

控制 UI 更新的过程。

Handler 类提供了两种创建方法,分别是在主线程中创建的主线程 Handler 和在子

线程中创建的子线程 Handler。

1. 在主线程中创建主线程 Handler

可以在主线程中创建 Handler 对象,因为 UI 线程就是主线程,所以使用主线程

Handler 机制可以完成主线程操作和子线程操作之间的信息交互。

以在Activity 中创建主线程 Handler 为例,创建代码如下:

```

Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

Message(msg);

}

};

```

创建 Handler 对象时需在 handleMessage() 方法中实现消息的处理逻辑。

如果需要在子线程中完成耗时操作,可以创建子线程 Handler,在子线程中处理消

息。

创建代码如下:

Handler 主要是使用 Message 和 MessageQueue 两个类实现消息传递的。其中,

Message 表示消息,MessageQueue 用于存储消息队列。

1. 创建 Message 对象

```

Message msg = new Message();

```

2. 向 Message 中传递数据

通过 setMessage() 方法向 Message 对象中添加数据:

```

= "message";

```

3. 将消息通过 Handler 发送出去

Handler 接收到消息时,会自动调用 handleMessage() 方法,对消息进行处理:

Handler 提供了许多常用方法,如 sendMessage()、sendEmptyMessage()、

sendDelayed()、removeCallbacks()等等。这里我们主要介绍一下常用方法的使用。

向消息队列中添加一条新消息,并在消息处理时将 Message 对象中的数据传递出

去:

向消息队列中添加一条新消息,消息不具备特殊的数据,可以直接由消息处理方法进

行处理:

```

ptyMessage(0);

```

3. sendDelayed()

在指定时间后,将一条新消息添加到消息队列中:

从消息队列中移除一个指定的Runnable 对象引用

```

Callbacks(mRunnable);

```

这里的 mRunnable 是一个 Runnable 对象。

下面以一个在子线程中下载图片并显示到 ImageView 控件上的例子来演示 Handler

的使用方法:

private ImageView imageView;

}

}).start();

}

private Bitmap downloadImage(String url) {

Bitmap bitmap = null;

try {

URL mUrl = new URL(url);

HttpURLConnection connection = (HttpURLConnection)

nnection();

nectTimeout(5000);

uestMethod("GET");

nput(true);

InputStream inputStream = utStream();

bitmap = Stream(inputStream);

到这里,关于 Handler 的用法介绍就告一段落了。下面我们就可以开始使用

Handler 对线程之间的通信和消息传递进行更加灵活的控制了。