一、什么是Message对象
Message
是android.os
包下的一个类,它代表了一个消息对象,用于在不同的线程之间传递信息,通常用于Handler
与Looper
之间的通信。在Android开发中,使用Message
对象来分发消息非常常见,因此,掌握Message
对象的用法和原理至关重要。
二、Message对象的创建和使用
创建Message
对象的方式非常简单,可以通过它的构造函数或者静态方法Message.obtain()
进行创建。
Message message = new Message();
// 或者
Message message = Message.obtain();
创建完成Message
对象之后,需要给它设置一个标记what
,用于区分不同的消息对象。同一个Handler
中不能存在两个标记相同的消息对象。
message.what = 1; // 设置消息标记为1
设置了消息标记之后,可以给Message
对象设置参数,方法是通过obj
属性来设置,obj
可以充当所有类型的参数。
message.obj = "这是一条消息"; // 设置参数为字符串类型
Message
对象准备就绪之后,我们就可以将其发送到目标线程中。在Handler
中,可以通过sendMessage()
或者sendEmptyMessage()
等方法将Message
发送到消息队列中,等待被处理。
handler.sendMessage(message); // 发送带参的消息对象
// 或者
handler.sendEmptyMessage(1); // 发送不带参的消息
当Message
对象到达消息队列中时,我们需要使用Handler
的handleMessage()
方法来处理消息。
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
String message = (String) msg.obj;
// 处理消息逻辑
break;
default:
break;
}
}
三、Message对象常用的方法
Message.obtain()
:通过静态方法创建Message
对象,避免了创建过多的对象,提高了性能。Message.recycle()
:回收Message
对象。因为Message
对象的创建是很耗费资源的,如果不再使用该对象就应该回收。Message.setData(Bundle data)
:设置Message
对象的数据,使用Bundle类型来传递指定的数据对象给Handler
。Message.getTarget()
:返回处理该消息的目标Handler
。Message.clone()
:深拷贝Message
对象,返回该消息的一个副本。
四、示例说明
- 使用
Message
对象传递简单消息
在MainActivity中创建一个Handler
对象,并在其中使用Message
对象进行消息传递。
public class MainActivity extends AppCompatActivity {
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
Toast.makeText(MainActivity.this, "收到一条消息", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 发送一条消息
Message message = Message.obtain();
message.what = 0;
mHandler.sendMessage(message);
}
}
- 使用
Message
对象传递较大的数据
定义一个自定义对象MyObject
,并将其作为Message
对象的参数进行传递。
public class MyObject {
private String mName;
public MyObject(String name) {
this.mName = name;
}
public String getName() {
return mName;
}
}
在MainActivity中创建一个Handler
对象,并在其中使用Message
对象进行消息传递。
public class MainActivity extends AppCompatActivity {
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
MyObject obj = (MyObject) msg.obj;
Toast.makeText(MainActivity.this, obj.getName(), Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 发送一条带参的消息
MyObject obj = new MyObject("这是一个MyObject对象");
Message message = Message.obtain();
message.what = 0;
message.obj = obj;
mHandler.sendMessage(message);
}
}
这两条示例说明虽然简单,但涵盖了Message
对象的核心用法,希望能够帮助大家更好地掌握Message
对象的处理方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发使用Message对象分发必备知识点详解 - Python技术站