一.消息处理类(Handler)简介
消息处理类Handler允许发送和处理Message或Runnable对象到其所在线程的MessageQueue中。Handler主要有一下两个作用:

1.将Message或Runnable应用post()或sandMessage()方法发送到MessageQueue中,在发送时可以指定延迟时间、发送时间以及要携带的Bundle数据。当MessageQueue循环到该Message时,调用相应的Handler对象的handlerMessage()方法对其进行处理。

2.在子线程中与主线程进行通信,也就是在工作线程中与UI线程进行通信。

*在一个线程中,只能有一个Looper和MessageQueue,但是可以有多个Handler,而且这些Handler可以共享一个Looper和MessageQueue。

Handler类提供的发送和处理消息的常用方法如下表:

void handleMessage(Message msg):处理消息的方法,该方法通常用于被重写。
final boolean hasMessage(int what):检查消息队列是否包含what属性指定值的消息。
final boolean hasMessage(int what,Object object):检查消息队列中是否包含what属性为指定且object属性为指定指定对象的消息。
Message obtainMessage():获取消息。
sendEmptyMessage(int what):发送空消息。
final boolean sendEmptyMessageDelayed(int what,long delayMillis):指定多少毫秒之后发送空消息。
final boolean sendMessage(Message msg):立即发送消息。
final boolean sendMessageAtTime(Message msg,long uptimeMillis):定时发送消息。
final boolean sendMessageDelayed(Message msg,long delayMillis):指定多少毫秒之后发送消息。

二.消息类(Message)简介
消息类(Message)被存放在MessageQueue中,一个MessageQueue中可以包含多个Message对象,每个Message对象可以通过Message.obtain()或Handler.obtainMessage()方法获得。一个Message对象有如下5个属性:

arg1 int类型 用来存放整型数据
arg2 int类型 用来存放整型数据
what int类型 用来保存消息标示
obj Object类型 是Object类型的任意对象
replyTo Messager类型 用来指定此Message发送到何处的可选Message对象

*使用Message类的属性可以携带int类型数据,如果要携带其他类型的数据,可以先将要携带的数据保存到Bundle中对象中,然后通过Message类的setData()方法将其添加到Message中。
如:
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putInt("int", 1);
bundle.putBoolean("boolean", false);
bundle.putByte("byte", (Byte) null);
bundle.putChar("char",'a');
bundle.putCharSequence("Stirng","Hello World");
bundle.putFloat("float", 12.3f);
bundle.putString("String", "Hello World");
bundle.putDouble("double", 12.3);
msg.setData(bundle);

总之,Message类的使用方法比较简单,在使用时,需注意以下3点:
a.尽管Message有public的默认构造方法,但是通常情况下,需要使用Message.obtaion()或Handler.obtainMessage()方法来从消息池中获得空消息对象,以节省资源。

b.如果一个Message只需要携带简单的int型信息,应优先使用Message.arg1和Message.arg2属性来传递信息,这比用Bundle更节省内存。

c.尽可能使用Message.what来标识信息,以便用不同方式处理Massage。

转载请注明出处:http://blog.csdn.net/acmman/article/details/46358991

【Android开发】消息处理类(Handler)与消息类(Message)介绍相关推荐

  1. Android开发人员不得不收集的工具类集合

    一.Android开发人员不得不收集的工具类集合  ----收藏 https://github.com/RobertCow/RxTools 二.android 开发之listview工具集合框架 ht ...

  2. Android 开发人员不得不收集的工具类集合

    RxTools 项目地址:vondear/RxTools  简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...

  3. android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏

    android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...

  4. Android开发之高仿QQ消息侧拉删除

    Android开发之高仿QQ消息侧拉删除 QQ消息的侧滑删除效果之炫酷,想必大家都见过吧,本人作为一名安卓开发人员,遇到如此炫酷的效果,怎能不研究一番呢,现本人已实现其基本功能,现将代码贴出,望各位大 ...

  5. android做拨号程序代码,Android开发手机拨号程序实现实例源码介绍

    Android开发手机拨号程序实现实例源码介绍,在上一篇文章中,我们实现了第一个程序:helloWorld,并成功测试完成.还给大家介绍了Android项目结构和说明.现在写一个手机拨号程序: 首先, ...

  6. Android开发之使用Handler封装下载图片工具类(源代码分享)

    如果每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时可以调用. (1)在清单文件添加权限 <us ...

  7. Android开发之访问WebService的工具类

    Android中使用WebService通讯,下面对访问WebService的工具类进行记录 package com.wjy.project.railway.tools;import android. ...

  8. AndroidUtils:Android开发不得不收藏的Utils工具类

    AndroidUtils Android开发不得不收藏的Utils 具体Demo使用参考开源github:AndroidUtilCode.本文只是稍微记录下方便查阅. Activity相关→Activ ...

  9. go java android开发,java - 不是封闭的类错误Android Studio

    我在Android开发中是新手,对Java没有深入的了解.我在一个问题上陷了很长时间.我正试图打开一个新的活动,点击按钮.但是我得到了一个错误:不是一个封闭类:katra_home. 这是mainac ...

最新文章

  1. .NET福利集锦【持续整理中】
  2. javascript 编辑网页
  3. android auto 字体大小,Android中给TextView字体大小用dp还是sp?dp和sp有什么区别?
  4. 淘宝和QQ空间顶部工具栏三角形箭头的实现方式
  5. DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)
  6. VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
  7. 机器学习的Agile过程
  8. 操作系统进程调度算法(先来先服务,短作业优先算法(SJF))linux下(附源码)
  9. C# 容器重用避免GC 的论证
  10. 开源ETL软件在智能化集成系统中的应用
  11. sed 替换_sed命令批量替换文件内容
  12. imap服务器appleimap.163.com没有响应,163smtp
  13. ireport使用参考
  14. 【PHP基础】文件操作
  15. 快速排序算法之我见(附上C代码)
  16. java gdal开源库_基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版
  17. python redis decode_responses
  18. [网络性能测试学习笔记] 测试AX3 Pro WiFi6无线路由器的系统转发能力(硬件转发交换能力L23吞吐量,L47应用层能力-最大可支持设备用户数,并发连接数等)
  19. java long类型溢出误区
  20. Blender插件Gizmo 3d Cursor And Saving Position 3D 1.5.0 光标

热门文章

  1. Chrome 控制台不完全指南
  2. LinuxIP设置,网络负载
  3. java 实现网络通信_利用Java怎么样实现网络通信功能
  4. 签约 计算机英语,签约协议时的英文表达
  5. Jasypt 加密-整合SpringBoot
  6. nacos客户端获取配置
  7. MySQL高级 - 锁 - MyISAM表锁 - 小结
  8. MySQL高级最左前缀法则
  9. HandlerMappings
  10. 字符输出流的基本使用_写出单个字符到文件