1.继承关系
Java.lang.Object
|_____android.os.Message
实现Parcelable接口。
2.类概要
这个类定义了一个能够发送给Handler对象的消息,它包含了消息的描述和任意数据对象。这个对象包含两个int类型字段和一个object类型字段,这三个字段在很多情况下不需要给其分配数据。
虽然Message类的构造器是公开的,但是获取它的实例的最好的方法是:调用Message.obtain()方法或Handler.obtainMessage()方法,它们会从回收对象池中获取一个废弃的Message对象。
3.Public字段
public static final Creator<Message> CREATOR
public int arg1:如果仅需要保持几个整数,那么使用arg1和arg2来替代setData()方法会降低系统开销。
public int arg2:如果仅需要保持几个整数,那么使用arg1和arg2来替代setData()方法会降低系统开销。
public Object obj :要发送给接受器的任意类型的对象。使用Messageer对象跨进程来发送消息时,如果它包含了一个框架类的Parcelable实现(而不是由应用程序实现的),那么这个对象只能是非空的。对于其他数据的传输要使用setData(Bundle)。
public Messenger replyto:设定能够接收此消息的回复的Messager对象。确切的语义应该使用发送者和接受者。
public int what:用户定义的消息编码,便于接受器能够表示这个消息。每个Handler对象都有它自己的消息编码命名空间,因此不需要担心与其他的Handler发生冲突。
4.Public构造器
public Message()
构造器,但获取Message对象最好方法是调用Message.obtain()方法。
5.Public方法
public void copyFrom(Message o)
对Message对象o的数据字段执行影像拷贝。它不能复制被链接的列表字段,也不能复制原始消息的时间戳、目标以及回调方法。
public int describeContents()
这个方法描述了Parcelable编组所包的特殊的对象的类型。
返回值:一个位掩码,它指示了由Parcelable对象编组的特殊对象类型的集合。
public Runnable getCallback()
获取消息被处理时要执行的回调对象。这个对象必须实现Runnable接口。由目标Handler对象调用的这个对象会接受分发给它的Message对象。如果没有设置,消息会被分发给接受Handler对象的handleMessage(Message)方法。
public Bundle getData()
获取跟本事件关联的任意数据的Bundle对象。如果需要会延迟创建它。通过调用setData(Bundle)方法来设置要传递的值。要注意的是,当通过Messager对象跨进程传递数据时,需要通过Bundle.setClassLoader()方法来设置与Bundle相关的ClassLoader,以便在获取数据时能够实例化为具体的对象。
public Handler getTarget()
获取接受消息的Handler对象的实现。这个对象必须实现Handler.handleMessage()方法,每个Handler对象都有它自己的消息编码命名空间,因此不需要担心与其他的Handler对象发生冲突。
public long getWhen()
以毫秒为单位,返回消息被发送给目标的时间。
public static Message obtain(Handler h, int what, int arg1, int arg2, Object obj)
与obtain()方法相同,但是要设置target、what、arg1、arg2、和obj成员变量的值。
参数说明:
h:处理消息的目标Handler对象;
what:消息的编码;
arg1:附加的整数数据;
arg2:附加的整数数据;
obj:附件的Object类型数据。
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain(Handler h, int what, Object obj)
与obtain()方法相同,但要设置target、what、和obj成员变量的值。
参数说明:
h:处理消息的目标Handler对象;
what:消息的编码;
obj:附件的Object类型数据。
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain(Handler h, int what)
与obtain方法相同,但要设置与Message对象相关的target和what成员变量。
参数说明:
h:处理消息的目标Handler对象;
what:消息的编码;
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain(Handler h)
与obtain方法相同,但要设置与Message对象相关的target和what成员变量。
参数说明:
h:处理消息的目标Handler对象;
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain(Handler h, Runnable callback)
与obtain方法相同,但要给返回的Message对象分配一个Runnable对象。
参数说明:
h:处理消息的目标Handler对象;
callback:处理消息时要执行的Runnable对象。
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain()
从全局的对象池中返回一个新的Message实例,在很多情况下,这样可以避免创建新对象的系统开销。
public static Message obtain(Handler h, int what, int arg1, int arg2)
与obtain()方法相同,但要设置target、what、arg1、arg2成员变量的值。
参数说明:
h:处理消息的目标Handler对象;
what:消息的编码;
arg1:附加的整数数据;
arg2:附加的整数数据;
返回值:从全局的对象池中返回一个Message对象。
public static Message obtain(Message orig)
与obtain()方法相同,但它是把一个既存的Message对象(包括它的目标)复制到一个新的Message对象中。
参数说明:
orig:要复制的原始消息。
返回值:从全局的对象池中返回一个Message对象。
public Bundle peekData()
有点像getData(),但是它不会延迟创建Bundle对象,如果Bundle对象不存在,则返回null。
public void recycle()
把一个Message对象的实例返回给全局的对象池。调用这个方法后,就不必在关注这个Message对象了,它会被有效的释放。
public void sendToTarget()
把Message对象发送给有getTarget()方法所指定的Handler对象。如果这个成员变量没有被设置,那么会抛出一个空指针异常。
public void setData(Bundle data)
给Message对象设置一个任意数据类型的Bundler对象。如果可以,使用arg1和arg2成员变量来发送简单的整数值,可以有效的降低系统开销。
public void setTarget(Handler target)
设置处理本消息的Handler对象。
public Sting toString()
返回一个简明的,外行人能够读懂的对象描述。子类的实现中被鼓励要覆写这个方法,并且提供实现所要考虑的对象的类型和数据。默认实现如下:
getClass().getName() + '@' + Integer.toHexString(hashCode())
返回值:返回一个可打印的对象的描述。
public void writeToParcel(Parcel dest, int flags)
把这个消息对象合并到一个Parcel对象中。
参数说明:
dest:指定消息对象应该被写入的Parcel类型对象。
flags:指定消息对象应该如何写入Parcel对象的附加标记。可以是0或PARCELABLE_WRITE_RETURN_VALUE。