博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android开发】消息处理类(Handler)与消息类(Message)介绍
阅读量:6440 次
发布时间:2019-06-23

本文共 1975 字,大约阅读时间需要 6 分钟。

一.消息处理类(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。

转载请注明出处:

你可能感兴趣的文章
do{...}while(0)的意义和用法
查看>>
【CJOJ】Contest4 - A+B Series
查看>>
Python中四种交换两个变量的值的方法
查看>>
ora-01033:oracle initialization or shutdown in progress 解决方法
查看>>
移动自动化相关名词解释
查看>>
微信开发者工具 快捷键
查看>>
monkey测试===修改adb的默认端口
查看>>
AsyncTask和Handler处理异步消息
查看>>
Scheme 中的 pair 和 list 简述
查看>>
iOS AVAssetExportSession 视频剪切、合并、压缩
查看>>
我收藏的技术知识图(每张都是大图)
查看>>
Spring Boot制作启动图案
查看>>
《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
查看>>
hdu Oil Deposits
查看>>
彻底理解javascript中的this指针
查看>>
SAS去空格
查看>>
Spring Cloud构建微服务架构(二)服务消费者
查看>>
这些老外的开源技术养活了一票国产软件
查看>>
Maven实战(六)--- dependencies与dependencyManagement的区别
查看>>
创业者应该有的5个正常心态(转)
查看>>