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 对线程之间的通信和消息传递进行更加灵活的控制了。


发布评论