admin 管理员组

文章数量: 1184232


2024年2月25日发(作者:手机查看网站源码)

handler中sendmessage和obtainmessage的用法

在Android的Handler中,sendMessage和obtainMessage都是用于实现线程间通信和消息传递的重要方法。在Handler中,使用sendMessage方法可以将消息发送到消息队列中,而使用obtainMessage方法可以从消息池中获取一个新的Message对象,用于存储消息的数据。

1. sendMessage方法的用法:

sendMessage方法用于将一个消息发送到消息队列中,接受一个Message对象作为参数,可以通过这个对象来传递消息的数据和标识。sendMessage方法的语法如下:

```java

boolean sendMessage(Message msg);

boolean sendMessageAtTime(Message msg, long uptimeMillis);

boolean sendMessageDelayed(Message msg, long delayMillis);

boolean sendMessageAtFrontOfQueue(Message msg);

```

- sendMessage方法将消息立即发送到消息队列中,而sendMessageAtTime方法和sendMessageDelayed方法可以指定消息的发送时间,delayMillis参数表示消息的延迟发送时间,uptimeMillis参数则表示消息的精确发送时间。

- sendMessageAtFrontOfQueue方法会将消息添加到队列的前面,优先处理。

2. obtainMessage方法的用法:

obtainMessage方法用于从消息池中获取一个新的Message对象,可以用于存储需要传递的数据和标识。obtainMessage方

法的语法如下:

```java

Message obtainMessage();

Message obtainMessage(int what);

Message obtainMessage(int what, Object obj);

Message obtainMessage(int what, int arg1, int arg2);

Message obtainMessage(int what, int arg1, int arg2, Object obj);

```

- obtainMessage方法可以根据需要指定消息的what字段,用于标识不同的消息类型。

- obtainMessage方法还可以附带传递参数,通过arg1和arg2可以传递两个整型参数,通过obj参数可以传递一个Object对象。

3. 示例代码:

下面是一个使用Handler的示例代码,演示了sendMessage和obtainMessage的用法:

```java

class MyHandler extends Handler {

@Override

public void handleMessage(Message msg) {

switch () {

case 1001:

// 处理消息类型为1001的消息

String data = (String) ;

//

break;

case 1002:

// 处理消息类型为1002的消息

int arg1 = 1;

int arg2 = 2;

//

break;

default:

Message(msg);

}

}

}

// 在其他地方使用Handler发送消息

MyHandler handler = new MyHandler();

Message message = Message(1001, "Hello,

Handler!"); // 获取Message对象,并传递消息类型和数据

ssage(message); // 发送消息到消息队列

// 在其他地方使用Handler处理消息

MyHandler handler = new MyHandler();

ssageDelayed(Message(1002, 10,

20), 1000); // 延迟1秒发送消息

```

以上就是sendMessage和obtainMessage方法的用法,它们是Android中实现线程间通信和消息传递的重要方法,可以很方便地在不同的线程之间传递数据和消息。


本文标签: 消息 方法 发送 用于 参数