public final class Message
extends Object
implements Parcelable
java.lang.Object | |
↳ | android.os.Message |
定义一条消息,其中包含可以发送到Handler
的描述和任意数据对象。 该对象包含两个额外的int字段和一个额外的对象字段,允许您在许多情况下不分配。
虽然Message的构造函数是public的,但获得其中一个的最好方法是调用 Message.obtain()
或 Handler.obtainMessage()
方法之一,这会从循环对象池中提取它们。
Inherited constants |
---|
From interface android.os.Parcelable
|
Fields |
|
---|---|
public static final Creator<Message> |
CREATOR |
public int |
arg1 如果只需要存储几个整数值,则arg1和arg2是使用 |
public int |
arg2 如果只需要存储几个整数值,则arg1和arg2是使用 |
public Object |
obj 要发送给收件人的任意对象。 |
public Messenger |
replyTo 可选的Messenger,可以发送对此消息的回复。 |
public int |
sendingUid 指示发送消息的uid的可选字段。 |
public int |
what 用户定义的消息代码,以便收件人可以识别此消息的内容。 |
Public constructors |
|
---|---|
Message() 构造函数(但获取消息的首选方法是致电 |
Public methods |
|
---|---|
void |
copyFrom(Message o) 使这个消息像o。 |
int |
describeContents() 描述此Parcelable实例的封送表示中包含的特殊对象的种类。 |
Runnable |
getCallback() 检索处理此消息时将执行的回调对象。 |
Bundle |
getData() 获取与此事件关联的任意数据的捆绑包,如果需要,可以懒惰地创建它。 |
Handler |
getTarget() 检索将收到此消息的 |
long |
getWhen() 返回此消息的目标交付时间,以毫秒为单位。 |
boolean |
isAsynchronous() 如果消息是异步的,则返回true,这意味着它不受 |
static Message |
obtain(Handler h) 与 |
static Message |
obtain(Handler h, int what) 同 |
static Message |
obtain(Handler h, Runnable callback) 与 |
static Message |
obtain(Message orig) 与 |
static Message |
obtain(Handler h, int what, int arg1, int arg2, Object obj) 同 |
static Message |
obtain(Handler h, int what, int arg1, int arg2) 同 |
static Message |
obtain(Handler h, int what, Object obj) 与 |
static Message |
obtain() 从全局池中返回一个新的Message实例。 |
Bundle |
peekData() 像getData()一样,但不会懒惰地创建Bundle。 |
void |
recycle() 将Message实例返回到全局池。 |
void |
sendToTarget() 将此消息发送到由 |
void |
setAsynchronous(boolean async) 设置消息是否是异步的,这意味着它不受 |
void |
setData(Bundle data) 设置任意数据值的包。 |
void |
setTarget(Handler target) |
String |
toString() 返回对象的字符串表示形式。 |
void |
writeToParcel(Parcel dest, int flags) 将此对象平铺到一个包裹中。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface android.os.Parcelable
|
Object obj
要发送给收件人的任意对象。 当使用Messenger
跨进程发送消息时,如果它包含框架类的一个Parcelable(不是应用程序实现的一个),那么它只能是非空的。 其他数据传输使用setData(Bundle)
。
int what
用户定义的消息代码,以便收件人可以识别此消息的内容。 每个Handler
都有自己的消息代码名称空间,因此您不必担心与其他处理程序发生冲突。
void copyFrom (Message o)
使这个消息像o。 执行数据字段的浅表副本。 不复制链接列表字段,也不复制原始消息的时间戳或目标/回调。
Parameters | |
---|---|
o |
Message
|
int describeContents ()
描述此Parcelable实例的封送表示中包含的特殊对象的种类。 例如,如果对象将在writeToParcel(Parcel, int)
的输出中包含writeToParcel(Parcel, int)
,则此方法的返回值必须包含CONTENTS_FILE_DESCRIPTOR
位。
Returns | |
---|---|
int |
a bitmask indicating the set of special object types marshaled by this Parcelable object instance. |
Runnable getCallback ()
检索处理此消息时将执行的回调对象。 该对象必须实现Runnable。 这由目标 Handler
正在接收此消息来调度它。 如果未设置,则该消息将被分派给接收处理程序的handleMessage(Message)
。
Returns | |
---|---|
Runnable |
Bundle getData ()
获取与此事件关联的任意数据的捆绑包,如果需要,可以懒惰地创建它。 通过调用setData(Bundle)
设置此值。 请注意,当通过Messenger
跨进程传输数据时,您需要通过Bundle.setClassLoader()
在Bundle上设置ClassLoader,以便在检索它们时可以实例化对象。
Returns | |
---|---|
Bundle |
也可以看看:
Handler getTarget ()
检索将收到此消息的Handler
实现。 该对象必须实现Handler.handleMessage()
。 每个处理程序都有自己的消息代码的名称空间,因此您不必担心与其他处理程序发生冲突。
Returns | |
---|---|
Handler |
boolean isAsynchronous ()
返回true如果消息是异步的,这意味着它不会受到 Looper
同步障碍。
Returns | |
---|---|
boolean |
True if the message is asynchronous. |
也可以看看:
Message obtain (Handler h)
与 obtain()
相同,但在返回的消息上设置 目标成员的值。
Parameters | |
---|---|
h |
Handler : Handler to assign to the returned Message object's target member. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Handler h, int what)
同 obtain()
,但设置了两个 目标 ,并在Message 什么成员的值。
Parameters | |
---|---|
h |
Handler : Value to assign to the target member. |
what |
int : Value to assign to the what member. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Handler h, Runnable callback)
与 obtain(Handler)
相同,但在返回的消息上分配回调Runnable。
Parameters | |
---|---|
h |
Handler : Handler to assign to the returned Message object's target member. |
callback |
Runnable : Runnable that will execute when the message is handled. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Message orig)
与 obtain()
相同,但将现有消息(包括其目标)的值复制到新消息中。
Parameters | |
---|---|
orig |
Message : Original message to copy. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Handler h, int what, int arg1, int arg2, Object obj)
同 obtain()
,但设定 目标 , 内容 ,ARG1,ARG2,和 OBJ成员的值。
Parameters | |
---|---|
h |
Handler : The target value to set. |
what |
int : The what value to set. |
arg1 |
int : The arg1 value to set. |
arg2 |
int : The arg2 value to set. |
obj |
Object : The obj value to set. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Handler h, int what, int arg1, int arg2)
同 obtain()
,但将 目标的价值观, 什么 ,ARG1,ARG2和成员。
Parameters | |
---|---|
h |
Handler : The target value to set. |
what |
int : The what value to set. |
arg1 |
int : The arg1 value to set. |
arg2 |
int : The arg2 value to set. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain (Handler h, int what, Object obj)
与 obtain()
相同,但设置 目标 , 什么和 obj成员的值。
Parameters | |
---|---|
h |
Handler : The target value to set. |
what |
int : The what value to set. |
obj |
Object : The object method to set. |
Returns | |
---|---|
Message |
A Message object from the global pool. |
Message obtain ()
从全局池中返回一个新的Message实例。 允许我们在很多情况下避免分配新对象。
Returns | |
---|---|
Message |
Bundle peekData ()
像getData()一样,但不会懒惰地创建Bundle。 如果Bundle尚不存在,则返回null。 有关详细信息,请参阅getData()
。
Returns | |
---|---|
Bundle |
也可以看看:
void recycle ()
将Message实例返回到全局池。
调用此函数后,您不得触摸消息,因为它已被有效释放。 回收当前已排队或正在交付给处理程序的消息是错误的。
void sendToTarget ()
将此消息发送到由getTarget()
指定的处理getTarget()
。 如果此字段尚未设置,则会抛出空指针异常。
void setAsynchronous (boolean async)
设置邮件是否是异步的,这意味着它不受 Looper
同步障碍的影响。
某些操作(如视图无效)可能会在Looper
的消息队列中引入同步障碍,以防止后续消息被传递,直到满足某些条件。 在查看无效的情况下,在调用invalidate()
之后发布的消息将通过同步屏障挂起,直到下一帧准备好绘制为止。 同步屏障确保在恢复之前完全处理失效请求。
异步消息免于同步障碍。 它们通常表示中断,输入事件和其他信号,即使其他工作已被暂停,也必须独立处理。
请注意,异步消息可能按照同步消息的顺序乱序发送,尽管它们总是按照顺序发送。 如果这些消息的相对顺序很重要,那么它们可能首先不应该是异步的。 谨慎使用。
Parameters | |
---|---|
async |
boolean : True if the message is asynchronous. |
也可以看看:
void setData (Bundle data)
设置任意数据值的包。 如果可以的话,使用arg1和arg2成员作为发送一些简单整数值的更低成本的方式。
Parameters | |
---|---|
data |
Bundle
|
也可以看看:
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法会返回一个“文本地表示”该对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |
void writeToParcel (Parcel dest, int flags)
将此对象平铺到一个包裹中。
Parameters | |
---|---|
dest |
Parcel : The Parcel in which the object should be written. |
flags |
int : Additional flags about how the object should be written. May be 0 or PARCELABLE_WRITE_RETURN_VALUE . |