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>
demo 地址,如果有需要的请点击查看
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/addevelopment/890100.html