Android Handler Message 里面的message.what, message.arg1,message.obj,obtainMessage, message.setData的使用
程序员文章站
2022-04-19 11:21:30
Android Handler Message 里面的message.what, message.arg1,message.arg2,message.obj,obtainMessage, message.setData 的使用1 message.what: 用户定义的消息代码,以便收件人可以识别2 message.arg1 定义传递的int 类型的值13 message.arg2 定义传递的int 类型的值24 message.obj 定义传递的值由于类型是object(对象) 所以比较常用....
Android Handler Message 里面的message.what, message.arg1,message.arg2,message.obj,obtainMessage, message.setData 的使用
1 message.what: 用户定义的消息代码,以便收件人可以识别
2 message.arg1 定义传递的int 类型的值1
3 message.arg2 定义传递的int 类型的值2
4 message.obj 定义传递的值由于类型是object(对象) 所以比较常用,可以传递各种值
5 handler.obtainMessage() 带参数形式发送消息,主要的却别代价可以通过下面的demo 区分,
6 message.setData() 使用bundle 的实行传参
下面写了一个demo具体的说下使用
主要代码如下
public class MainActivity extends AppCompatActivity implements Handler.Callback {
private Handler handler;
private TextView textView;
private MesBean mesBean = new MesBean("张三丰", "男", 108);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text_content);
handler = new Handler(this);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个线程
handler.post(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
//用户定义的消息代码,以便收件人可以识别
message.what = 1;
// 定义传递的int 类型的值
message.arg1 = 119;
message.arg2 = 120;
// 定义传递的值由于类型是object(对象) 所以比较常用,可以传递各种值
message.obj = "传送的内容:哇咔咔";
handler.sendMessage(message);
}
});
}
});
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
//用户定义的消息代码,以便收件人可以识别
message.what = 2;
// 定义传递的值定义类型为bean
message.obj = mesBean;
handler.sendMessage(message);
}
});
}
});
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
//用户定义的消息代码,以便收件人可以识别
message.what = 3;
// setData 传值
Bundle bundle = new Bundle();
bundle.putString("Name", "张三丰");
bundle.putString("Sex", "男");
bundle.putInt("Age", 108);
message.setData(bundle);
handler.sendMessage(message);
}
});
}
});
findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(new Runnable() {
@Override
public void run() {
handler.obtainMessage(4, mesBean).sendToTarget();
}
});
}
});
}
@Override
public boolean handleMessage(@NonNull Message msg) {
switch (msg.what) {
case 1:
String info = (String) msg.obj;
int mes1 = msg.arg1;
int mes2 = msg.arg2;
textView.setText(info + "arg1=" + mes1 + "arg2=" + mes2);
break;
case 2:
case 4:
MesBean mesBean1 = (MesBean) msg.obj;
textView.setText(
mesBean1.getName() + "," + mesBean1.getSex() + "," + mesBean1.getAge());
break;
case 3:
String name = msg.getData().getString("Name");
String sex = msg.getData().getString("Sex");
int age = msg.getData().getInt("Age");
textView.setText(name + sex + age);
break;
}
return false;
}
@Override
protected void onDestroy() {
super.onDestroy();
if (handler !=null){
handler.removeCallbacksAndMessages(null);
handler = null;
}
}
}
bean 文件
public class MesBean {
private String Name;
private String Sex;
private int Age;
public MesBean(String Name, String Sex, int Age) {
this.Name = Name;
this.Sex = Sex;
this.Age = Age;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
Sex = sex;
}
public int getAge() {
return Age;
}
public void setAge(int age) {
Age = age;
}
}
xml 代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击发送消息" />
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="传参的形式" />
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="setData点击发送Bean消息" />
<Button
android:id="@+id/btn3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="obtainMessage点击发送Bean消息" />
<TextView
android:id="@+id/text_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="接受消息"
android:textColor="#FF4444"
android:textSize="20sp" />
</LinearLayout>
本文地址:https://blog.csdn.net/qq_33210042/article/details/112521010
上一篇: 让所有木马都不起作用的方法(变态)