Android类参考---Message

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。

posted @ 2012-04-27 14:50  移动应用开发  阅读(290)  评论(0编辑  收藏  举报