【Android开发】消息处理类(Handler)与消息类(Message)介绍
消息处理类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)介绍相关推荐
- Android开发人员不得不收集的工具类集合
一.Android开发人员不得不收集的工具类集合 ----收藏 https://github.com/RobertCow/RxTools 二.android 开发之listview工具集合框架 ht ...
- Android 开发人员不得不收集的工具类集合
RxTools 项目地址:vondear/RxTools 简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷 ...
- android打地鼠设计报告,android开发中利用handler制作一个打地鼠小游戏
android开发中利用handler制作一个打地鼠小游戏 发布时间:2020-11-25 15:21:11 来源:亿速云 阅读:136 作者:Leah 这期内容当中小编将会给大家带来有关androi ...
- Android开发之高仿QQ消息侧拉删除
Android开发之高仿QQ消息侧拉删除 QQ消息的侧滑删除效果之炫酷,想必大家都见过吧,本人作为一名安卓开发人员,遇到如此炫酷的效果,怎能不研究一番呢,现本人已实现其基本功能,现将代码贴出,望各位大 ...
- android做拨号程序代码,Android开发手机拨号程序实现实例源码介绍
Android开发手机拨号程序实现实例源码介绍,在上一篇文章中,我们实现了第一个程序:helloWorld,并成功测试完成.还给大家介绍了Android项目结构和说明.现在写一个手机拨号程序: 首先, ...
- Android开发之使用Handler封装下载图片工具类(源代码分享)
如果每下载一张图片,就得重写一次Http协议,多线程的启动和handler的信息传递就显得太麻烦了,我们直接来封装一个工具类,便于我们以后在开发时随时可以调用. (1)在清单文件添加权限 <us ...
- Android开发之访问WebService的工具类
Android中使用WebService通讯,下面对访问WebService的工具类进行记录 package com.wjy.project.railway.tools;import android. ...
- AndroidUtils:Android开发不得不收藏的Utils工具类
AndroidUtils Android开发不得不收藏的Utils 具体Demo使用参考开源github:AndroidUtilCode.本文只是稍微记录下方便查阅. Activity相关→Activ ...
- go java android开发,java - 不是封闭的类错误Android Studio
我在Android开发中是新手,对Java没有深入的了解.我在一个问题上陷了很长时间.我正试图打开一个新的活动,点击按钮.但是我得到了一个错误:不是一个封闭类:katra_home. 这是mainac ...
最新文章
- .NET福利集锦【持续整理中】
- javascript 编辑网页
- android auto 字体大小,Android中给TextView字体大小用dp还是sp?dp和sp有什么区别?
- 淘宝和QQ空间顶部工具栏三角形箭头的实现方式
- DPDK — 网卡初始化流程(Intel 82599 ixgbe 网卡驱动示例)
- VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
- 机器学习的Agile过程
- 操作系统进程调度算法(先来先服务,短作业优先算法(SJF))linux下(附源码)
- C# 容器重用避免GC 的论证
- 开源ETL软件在智能化集成系统中的应用
- sed 替换_sed命令批量替换文件内容
- imap服务器appleimap.163.com没有响应,163smtp
- ireport使用参考
- 【PHP基础】文件操作
- 快速排序算法之我见(附上C代码)
- java gdal开源库_基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版
- python redis decode_responses
- [网络性能测试学习笔记] 测试AX3 Pro WiFi6无线路由器的系统转发能力(硬件转发交换能力L23吞吐量,L47应用层能力-最大可支持设备用户数,并发连接数等)
- java long类型溢出误区
- Blender插件Gizmo 3d Cursor And Saving Position 3D 1.5.0 光标