欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

 

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://blog.csdn.net/qq_33210042/article/details/112521010