Message
译者署名: strongxu
版本:Android 3.1 r1
结构
继承关系
public final class Message extends Object implements Parcelable
java.lang.Object
android.os.Message
类概述
定义一个包含任意类型的描述数据对象,此对象可以发送给Handler。对象包含两个额外的int字段和一个额外的对象字段,这样可以使得在很多情况下不用做分配工作。
尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。
字段
public static final Creator<Message> CREATOR
public int arg1
如果只需要存储几个整型数据,arg1 和 arg2是setData()的低成本替代品。
public int arg2
如果只需要存储几个整型数据,arg1 和 arg2是setData()的低成本替代品。
public Object obj
发送给接收器的任意对象。当使用Message对象在线程间传递消息时,如果它包含一个Parcelable的结构类(不是由应用程序实现的类),此字段必须为非空(non-null)。其他的数据传输则使用setData(Bundle)方法。
注意Parcelable对象是从FROYO版本以后才开始支持的。
public Messenger replyTo
指明此message发送到何处的可选Messenger对象。具体的使用方法由发送者和接受者决定。
public int what
用户自定义的消息代码,这样接受者可以了解这个消息的信息。每个handler各自包含自己的消息代码,所以不用担心自定义的消息跟其他handlers有冲突。
公共构造器
public Message()
构造器(但是获取Message对象的最好方法是调用Message.obtain())。
公共方法
public void copyFrom (Message o)
使此message跟参数o相似。浅拷贝数据域。不拷贝源message的链表字段,时间戳和目标/回调。
public int describeContents ()
描述了包含在Parcelable对象排列信息中的特殊对象的类型。
返回值
一个标志位,表明Parcelable对象特殊对象类型集合的排列。
public Runnable getCallback ()
获取回调对象,此对象会在message处理时执行。此对象必须实现Runnable接口。回调由接收此消息并分发的目标handler调用。如果没有设置回调,此消息会分发到接收handler的handleMessage(Message)。
public Bundle getData ()
获取附加在此事件上的任意数据的Bundle对象,需要时延迟创建。通过调用setData(Bundle)来设置Bundle的值。需要注意的是,如果通过Messenger对象在进程间传递数据时,需要调用Bundle类的Bundle.setClassLoader()方法来设置ClassLoader,这样当接收到消息时可以实例化Bundle里的对象。
参考
peekData()
setData(Bundle)
public Handler getTarget ()
获取将接收此消息的Handler对象。此对象必须要实现Handler.handleMessage()方法。每个handler各自包含自己的消息代码,所以不用担心自定义的消息跟其他handlers有冲突。
public long getWhen ()
返回此消息的传输时间,以毫秒为单位。
public static Message obtain (Handler h, int what, int arg1, int arg2, Object obj)
与obtain()一样,但是设置了target, what, arg1, arg2和obj的值。
参数
h 设置的target值
what 设置的what值
arg1 设置的arg1值
arg2 设置的arg2值
obj 设置的obj值
返回值
从全局池中分配的一个Message对象。
public static Message obtain (Handler h, int what, Object obj)
与obtain()一样,但是设置了target, what和obj的值。
参数
h 设置的target值
what 设置的what值
obj 设置的obj值
返回值
从全局池中分配的一个Message对象。
public static Message obtain (Handler h, int what)
与obtain()一样,但是设置了target和what的值。
参数
h target的值
what what的值
返回值
从全局池中分配的一个Message对象。
public static Message obtain (Handler h)
与obtain()一样,但是设置了target的值
参数
h 消息对象的target成员的值
返回值
从全局池中分配的一个Message对象。
public static Message obtain (Handler h, Runnable callback)
与obtain(Handler)一样,但是设置回调函数,在Message返回时调用。
参数
h 消息对象的target成员的值
callback 当消息处理时会调用的回调函数
返回值
从全局池中分配的一个Message对象。
public static Message obtain ()
从全局池中返回一个新的Message实例。在大多数情况下这样可以避免分配新的对象。
public static Message obtain (Handler h, int what, int arg1, int arg2)
与obtain()一样,但是设置了target, what, arg1和arg2的值
参数
h 设置的targe值
what 设置的what值
arg1 设置的arg1值
arg2 设置的arg2值
返回值
从全局池中分配的一个Message对象。
public static Message obtain (Message obj)
同obtain(),但是从一个已存在的消息中拷贝值(包括它的目标)。
参数
orig 要拷贝的源消息
返回值
从全局池中分配的一个Message对象。
public Bundle peekData ()
与getData()相似,但是并不延迟创建Bundle。如果Bundle对象不存在返回null。更多信息见getData()。
参考
getData()
setData(Bundle)
public void recyle ()
向全局池中返回一个Message实例。一定不能在调用此函数后再使用Message——它会立即被释放。
public void sendToTarget ()
向Handler发送此消息,getTarget()方法可以获取此Handler。如果这个字段没有设置会抛出个空指针异常。
public void setData (Bundle data)
设置一个任意数据值的Bundle对象。如果可以,使用arg1和arg2域发送一些整型值以减少消耗。
参考
getData()
peekData()
public void setTarget (Handler target)
设置将接收此消息的Handler对象。
public String toString ()
返回一个Message对象简单的,可读懂的描述信息。鼓励子类重写此方法,实现时最好把对象的类型的数据考虑进去。默认的实现等同与以下表达式:
如果需要实现toString方法,参考Writing a useful toString method。
返回值
一个代表此对象的可打印字符串
public void writeToParcel (Parcel dest, int flags)
将类的数据写入外部提供的Parcel中
参数
dest 对象被写入的Parcel
flags 对象如何被写入的附加标志,可能是0或PARCELABLE_WRITE_RETURN_VALUE。
相关推荐
安卓发送Exchange邮件,引用ews-android-api.jar和joda-time-2.8.jar两个包。 用法: ...message.setBody(MessageBody.getMessageBodyFromText("Sent using the EWS Android API.")); message.send();
本资源"安卓Android源码——HandlerMessage2.rar"可能包含了关于`Handler`和`Message`的深入实践和示例代码,下面我们将详细探讨这些核心组件。 `Handler` 是 Android 中用于在线程间传递消息的对象。它通常用于将...
"安卓Android源码——pushMessage.zip" 提供的源码可能是一个简单的推送消息实现,或者是一个完整的推送服务框架。这里我们将围绕Android推送消息的实现、工作原理以及相关技术进行详细讲解。 1. **Android推送消息...
这个压缩包"安卓Android源码——HandlerMessage3.rar"很可能包含了关于这三者如何协同工作的示例代码或者详细分析。现在,我们将深入探讨这些概念及其在Android系统中的作用。 `Handler` 是一个用于发送和处理消息...
这个压缩包“安卓Android源码——PushMessage百度的.zip”很可能是包含了实现百度推送服务(Baidu Push)的源代码。在这里,我们将深入探讨如何理解和使用这样的源代码,以及相关的Android推送技术。 首先,我们...
在"安卓Android源码——pushMessage(2).zip"这个压缩包中,我们很可能是找到了一个实现推送消息功能的示例代码或框架。下面,我们将深入探讨相关的知识点。 首先,让我们了解推送消息的基本概念。推送消息是移动...
这个"安卓Android源码——pushMessage (2).zip"文件很可能包含了实现推送消息功能的相关代码示例,下面我们将深入探讨这个话题。 首先,让我们理解推送消息的基本概念。推送消息是一种服务器到设备(Server-to-...
在安卓(Android)开发中,`Handler`、`Message` 和 `Looper` 是三个非常重要的组件,它们共同构成了安卓的异步消息处理机制。这个机制是安卓系统中处理UI线程与后台线程通信的核心方式。`HandlerMessage1.rar` 文件...
《Android API详解——新手入门指南》 Android API是Android操作系统的核心组成部分,它为开发者提供了丰富的功能接口,使得我们可以构建出各种各样的移动应用。本文将深入解析Android API的基础内容,帮助新手快速...
在Android系统中,广播组件(BroadcastReceiver)是四大组件之一,它用于接收并响应系统或应用发布的广播消息。本实践将详细介绍如何利用Android广播组件来实现一个简单的短信黑名单功能。 首先,我们需要创建一个...
不过,需要注意的是,从Android 8.0(API级别26)开始,系统对后台服务和广播接收器的执行进行了限制。因此,如果应用目标版本是Android 8.0或更高,我们可能需要使用JobScheduler或WorkManager来确保在合适的时间...
版开心网功能实现,Android硬件驱动开发关键技术和HAL移植要领,Android中文翻译组——Android中文API合集(4),Android Google.Android开发入门与实战,Android 精通Android游戏开发,3G应用开发之Android,15个...
【标题】"openfire+asmack中文api+androidDemo"涉及的是即时通讯(Instant Messaging, IM)技术在Android平台上的实现。Openfire是一款开源的XMPP服务器,而ASMACK是针对Android平台的XMPP库,它允许开发者在Android...
版开心网功能实现,Android硬件驱动开发关键技术和HAL移植要领,Android中文翻译组——Android中文API合集(4),Android Google.Android开发入门与实战,Android 精通Android游戏开发,3G应用开发之Android,15个...
在Android平台上,短信应用开发是一项常见的任务,而短信截获是指在系统接收到短信后,通过自定义的BroadcastReceiver来捕获并处理这些短信。这个技术对于开发具有特定功能的应用,如安全防护、消息提醒或者自动化...
**Android中文API文档详解** Android API文档是开发者在进行Android应用开发时不可或缺的参考资料,它提供了详尽的类库、接口、方法等说明,帮助开发者理解Android系统的内部工作原理并有效地利用其功能。这份...
Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制
Android中文API合集是针对Android应用开发者的重要参考资料,它整合了Android系统的所有核心API,并以中文形式呈现,便于中国开发者理解和使用。这个合集涵盖了从基础的UI组件、网络通信到多媒体处理、数据存储等...