一   消息机制

1、为什么要使用Message机制主要是为了保证线程之间操作安全,同时不需要关心具体的消息接收者,使消息本身和线程剥离开,这样就可以方便的实现定时、异步等操作。

2、Message机制原理示意图:

Activity   <--------------->  EHandler<----->  Looper<----->  MessageQueue

IntentReceiver <----->  EHandler <----->  Looper<----->  MessageQueue

二 实现步骤

消息机制,实现这种机制需要只需要四步:

1、实例化Looper(因为实例化Handler时需要一个looper);

2、实例化Handler,这里需要覆盖handleMessage方法,处理收到的消息;

3、 实例化Message对象,调用已经实例化好的handler对象的obtainMessage方法,把数据传给obtainMessage方法,obtainMessage方法就会实例化一个Message对象。(这里也可以发送实现Runnable接口的对象);

4、调用Handler的sendMessage方法把实例化好的Message对象发送出去。

三  相关知识点

1、什么是Message

Message是封装了需要传递的数据交由Handler 处理的对象。

2、Message的作用:
    用于存放传递的数据;是主线程和子线程传递数据的载体

3、如何使用Message:

3.1  初始化Message对象:

Message message= new Message();

Message message= Message.obtain();

Messager message= handler.obtaionMessager();

3.2  向Message中添加数据:
 Message message = Message.obtain();
// 将传递数据,封装到Message消息对象中
 message.what = 0;
 message.arg1 = 1;
 message.arg2 = 2;
 message.obj = “传递的内容”;
Bundle bundle = new Bundle();
bundle.putString("name","张三");
message.setData(bundle);

3.3  获取Message中存储的数据
private Handler handler = new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int flag1 = msg.what;
            int flag2 = msg.arg1;
            int flag3 = msg.arg2;
            String resultMsg = (String) msg.obj;
            Bundle bundle = msg.getData();
            String name = bundle.getString("name");
        }
    };
4  注意事项

Message的作用:
用于存放传递的数据;
是主线程和子线程传递数据的载体
Send 方式 -【注意事项】
子线程向主线程中发送空消息时,可以调用方法直接传入what值,并且放入到消息队列中;
Send方式发送消息,需要创建Message对象,封装传递的数据,将Message对象压入消息队列中;
Send方式发送消息后,需要在Handler的 handleMessage(Message)方法中,获取消息并处理;
Send方式定时发送消息和延迟发送消息, 时间的单位是毫秒。

Message的使用相关推荐

  1. 规范的 Commit Message

    在 Angular 规范中,Commit Message 包含三个部分,分别是 Header.Body 和 Footer,格式如下: <type>[optional scope]: < ...

  2. Setting the Reply-To Header in an Email using CDONTS.NewMail Object and CDO Message

    代码  1 <%  2 Option Explicit  3   4 Dim objMail  5 Dim strSubject  6 Dim strBody  7   8 strSubject ...

  3. EMQ学习笔记---Clean Session和Retained Message

    MQTT会话(Clean Session) MQTT客户端向服务器发起CONNECT请求时,可以通过'Clean Session'标志设置会话. 'Clean Session'设置为0,表示创建一个持 ...

  4. Message、Handler、Message Queue、Looper之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 在单线程模型下,为了解决线程通信问题,Android设计了一个通信机制.Message Queue(消息队列), 线程间的通信 ...

  5. CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法...

    CAS (10) -- JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法 jboss版本: jb ...

  6. 使用alterMIME实现添加message footer功能

    1. 安装alterMIME   tar zxvf altermime-0.3.8.tar.gz   cd altermin3-0.3.8   make   make install   alterm ...

  7. Selenium 爬虫时遇到的问题 Selenium message:session not created

    出现问题如下: Selenium message:session not created: This version of ChromeDriver only supports Chrome vers ...

  8. Warning message:NAs introduced by coercion

    Warning message:NAs introduced by coercion 目录 Warning message:NAs introduced by coercion 问题: 解决: 完整问 ...

  9. Warning message:In a + b : longer object length is not a multiple of shorter object length

    Warning message:In a + b : longer object length is not a multiple of shorter object length 目录 Warnin ...

  10. R语言message函数、warning()函数和stop()函数输出程序运行健康状态信息实战

    R语言message函数.warning()函数和stop()函数输出程序运行健康状态信息实战 目录 R语言message函数.warning()函数和stop()函数输出程序运行健康状态信息实战

最新文章

  1. 第二届中国云计算应用论坛圆满落幕
  2. 科学家提出了忆阻性神经混合芯片 这一概念
  3. HDU 4267 A Simple Problem with Integers
  4. 【机器学习基础】深入讨论机器学习 8 大回归模型的基本原理以及差异!
  5. 网际协议:数据报格式和分片以及IPv4编址
  6. mysql connetor_python mysqlconnetor
  7. erlang lists模块函数使用大全
  8. JAVA设计模式 - 建造者模式
  9. Python按照索引访问list
  10. 第2章:Maven的安装/2.1 Window下的安装
  11. OpenDRIVE地图图形化
  12. 演讲实录丨朱频频 让Bots无处不在
  13. linux常用c函数(中文版)
  14. 洛谷:P2172 [国家集训队]部落战争
  15. 阿里云官网网址URL链接后面的spm是什么参数?有什么作用?
  16. 搜索市场变局:少了云云,剩了搜狗
  17. 蓝牙智能门锁现状分析
  18. chp7三个修饰符test5 考点:静态方法 记录原因:对象类型的强转
  19. 获取不到input内自己输入的值
  20. 博文视点官方博客已经开通!

热门文章

  1. 人工智能-seaborn单双多变量绘图、两案例:NBA球员数据分析、北京租房数据统
  2. 前端开发需要学习什么?(非技术栈)
  3. 二维数组赋值给vector
  4. java jaxb_JavaEE学习之JAXB
  5. pycharm创建文件夹以及查看源文件存放位置(FOR MAC)
  6. 用python求2+4+6+...+100的和
  7. 初级数据分析师要具备什么技能?
  8. HTML Ueditor图片宽度超出编辑器
  9. $.getJSON解决跨域问题
  10. 新媒体文案的前期准备