android开发分享Android Handler Message 里面的message.what, message.arg1,message.obj,obtainMessage, message.setData的使用

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具体的说下使用

 

Android Handler Message 里面的message.what, message.arg1,message.obj,obtainMessage,  message.setData的使用

主要代码如下

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

(0)
上一篇 2021年10月19日
下一篇 2021年10月19日

精彩推荐