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);@Overrideprotected 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() {@Overridepublic void onClick(View v) {// 开启一个线程handler.post(new Runnable() {@Overridepublic 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() {@Overridepublic void onClick(View v) {handler.post(new Runnable() {@Overridepublic void run() {Message message = Message.obtain();//用户定义的消息代码,以便收件人可以识别message.what = 2;// 定义传递的值定义类型为beanmessage.obj = mesBean;handler.sendMessage(message);}});}});findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handler.post(new Runnable() {@Overridepublic 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() {@Overridepublic void onClick(View v) {handler.post(new Runnable() {@Overridepublic void run() {handler.obtainMessage(4, mesBean).sendToTarget();}});}});}@Overridepublic 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;}@Overrideprotected 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"><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="点击发送消息" /><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="传参的形式" /><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="setData点击发送Bean消息" /><Buttonandroid:id="@+id/btn3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="obtainMessage点击发送Bean消息" /><TextViewandroid:id="@+id/text_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="接受消息"android:textColor="#FF4444"android:textSize="20sp" /></LinearLayout>

demo 地址,如果有需要的请点击查看

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

  1. 2021-12-31 Android rc文件里面的on property在哪里执行,这里简单跟踪一下

    一.拿下面的rc文件来分析,红框内容是我临时添加的. 二.执行步骤分析: 1.system\core\init\init.cpp 里面的SecondStageMain函数里面的ExecuteOneCo ...

  2. Android之OkDownload里面的OKHttp提示java.lang.IllegalArgumentException: Invalid URL port: “image“

    1 .问题 release版本线上奔溃如下 Fatal Exception: java.lang.IllegalArgumentException: Invalid URL port: "i ...

  3. Android Handler消息机制源码解析

    好记性不如烂笔头,今天来分析一下Handler的源码实现 Handler机制是Android系统的基础,是多线程之间切换的基础.下面我们分析一下Handler的源码实现. Handler消息机制有4个 ...

  4. android message 代码,Android Handler移除Message详解及实例代码

    Android Handler移除Message详解 问题: 1.removeMessage(what)函数是否只能移除对应what值的Message? 2.对于Delayed发送的Message,能 ...

  5. android Handler Message传递参数,handler子线程和主线程通讯

    创建Handler private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) { ...

  6. Android关于Handler发送消息里面的arg1和arg2以及obj和what的用法

    arg1 用于携带int整数型数据,到handler里面取值int num = msg.arg1; arg2 用于携带int整数型数据int num = msg.arg2; obj用于携带对象数据 例 ...

  7. Android项目 匹配Text里面的Emoji 和 QQ表情

    吐槽:第一次写博客,新手一枚.写这个博客为了共享一下资源,大家相互学习,最主要目的是抛砖引玉,引大婶指高见. 前言:需求是这样的,搞聊天,而且是在一个字库里面没有emoji的android系统里面搞. ...

  8. Android stdio build.gradle buildscript 里面的repositories 和allprojects里面 repositories 的区别

    第一段 buildscript 里面的 repositories 表示只有编译工具才会用这个仓库. 比如 buildscript 里面的 dependencies classpath 'com.and ...

  9. [Android] (在ScrollView里嵌套view)重叠view里面的onTouchEvent的调用方法

    在我前面的自定义裁剪窗口的代码中,我把裁剪的view放在了大的scrollview里,这样就出现了程序只能触发scrollview,无法操作我的裁剪窗口.所以我加了那篇博客下面最后两段代码.其实我遇到 ...

最新文章

  1. 怎么切换用户_走进通信:4G手机跟基站是怎么“交流”的
  2. Apache URL重写的配置 及其 apache500错误
  3. 互联网1分钟 |1227
  4. VTK:不透明度用法实战
  5. 求解哈夫曼编码Java实现,用Java实现哈夫曼编码解决方法
  6. IOS-网络(文件上传)
  7. 数据结构单链表SingleLinkedList,Java实现单链表增删改查
  8. 数学奥赛大神,两次以满分获IMO金牌,北大数学博士提前毕业
  9. 【SPOJ】2319 BIGSEQ - Sequence
  10. ListView添加headview
  11. HTTP/HTTPS 01-不同状态码含义
  12. 3.手动搭建Maven项目
  13. java中添加图片_java中添加图片的问题__ImageIcon_panel1_import_image1_useImage__169IT.COM
  14. NBU3.2及以上版本收集DataCollect和NBSU等日志的统一方法
  15. 如何使用视频转换器将kux格式转换成mp4格式
  16. Android基站定位源代码
  17. ES可视化工具--Dejavu--下载、安装、使用
  18. 什么是PaaS平台?一文看懂SaaS、PaaS和私有化部署的区别
  19. vue 视频 时间进度条组件
  20. MySQL数据的独立性包括_数据库独立性是指数据库和什么相互独立?

热门文章

  1. java二维数组添加元素_Java二维数组与动态数组ArrayList类详解
  2. Zjh游戏(十四)用户头像的加载以及排行榜的实现
  3. 如何更快的查找线上系统问题--多次重大线上事故复盘
  4. 南宁有几家机器人餐厅_全国首家机器人自助餐厅开业 20多种机器人亮相
  5. 使用QT实现倒计时——20191103
  6. 摩根大通CEO吉米·戴蒙质疑比特币2100万枚上限的道理和错误
  7. setcaptureproperty设置效果没有_小微部分功能使用指南 合理的设置 收益最大化
  8. SecureCRT and SecureFX 8.0 安装破解版(附注册机+破解教程) 64位
  9. 中创09校园招聘试题
  10. Java设计模式之创建型模式