Android Message

梁丘波鸿
2023-12-01

好长时间 没写博客了。发现浏览量增长的变慢了。从我笔记里面 拿一篇出来
关于 Android Message 的

public int what; //用户定义的消息代码,以便收件人可以识别此消息的内容

// setData()如果您只需要存储几个整数值,arg1和arg2是使用成本较低的替代方法 。
public int arg1;
public int arg2;

//要发送给收件人的任意对象。当 Messenger用于跨进程发送消息时,如果它包含框架类的Parcelable(不是应用程序实现的框架类),则它只能是非null。用于其他数据传输使用 setData(Bundle)。
public Object obj;

//可选的Messenger,可以发送对此消息的回复。究竟如何使用它的语义取决于发送者和接收者。
public Messenger replyTo;

//可选字段,指示发送消息的uid。这只对由{@link Messenger}发布的消息有效;否则,就是-1。
public int sendingUid = -1;

//标识是否在使用
static final int FLAG_IN_USE = 1 << 0;//二进制左移0位 还是1
//如果设置消息是异步的
static final int FLAG_ASYNCHRONOUS = 1 << 1; //二进制左移1位 10 变成2
//要在copyFrom方法中清除的标记
static final int FLAGS_TO_CLEAR_ON_COPY_FROM = FLAG_IN_USE;

//标识
int flags;

// getWhen()Return the targeted delivery time of this message, in milliseconds.
返回此消息的目标交付时间,单位为毫秒。
long when;

Bundle data;
//传入一个Bundle 携带数据
public void setData(Bundle data)
//获得与此事件关联的一捆任意数据,如有必要,可以懒惰地创建它(就是创建一个Bundle)。通过调用设置此值 setData(Bundle)。请注意,在跨进程传输数据时Messenger,您需要在Bundle via上设置ClassLoader,Bundle.setClassLoader()以便在检索对象时可以实例化对象。
public Bundle getData()
//像getData()一样,但不会懒惰地创建Bundle。如果Bundle尚不存在,则返回null
public Bundle peekData()

//可以设定 handler
Handler target;
//对象必须实现{@link android.os.Handler#handleMessage(android.os.Message) Handler.handleMessage()}。每个处理程序都有自己的消息代码名称空间,所以您不需要担心与其他处理程序的冲突。
public Handler getTarget()
//调用自己本身的handler 发送自己
public void setTarget(Handler target)

//如果设置了 这个 那么将不会触发handler的handleMessage(Message)方法
Runnable callback;

public static Message obtain(Handler h, Runnable callback)
//返回callback
public Runnable getCallback()

不能存储下一个 ,当handler发送后 next会为null
Message next;

//将此message设为o实例。执行数据字段的浅表副本。不复制Message next;字段,也不复制long when;或Handler target / Runnable callback
public void copyFrom(Message o)

//调用自己本身的handler 发送自己. 会有空指针 如果不设置的话
public void sendToTarget() {
target.sendMessage(this);
}
//异步消息不受同步障碍(MessageQueue.enqueueSyncBarier())的影响。它们通常表示中断,输入事件和其他必须独立处理的信号,即使其他工作已被暂停。
注意,异步消息可以相对于同步消息不按顺序传送,尽管它们总是按顺序传送。如果这些消息的相对顺序很重要,那么它们可能首先不应该是异步的。谨慎使用。
public void setAsynchronous(boolean async)

//将message 序列化
Parcel:要写入对象的Parcel。
int:有关如何编写对象的其他标志。可能是0或。 Parcelable.PARCELABLE_WRITE_RETURN_VALUE
public void writeToParcel(Parcel dest, int flags)

//私有方法 只能反射获取, 将message反序列化
private void readFromParcel(Parcel source)
//返回0
public int describeContents()

//回收 不检查
void recycleUnchecked()
//将Message实例返回到全局池。

调用此函数后,您不能触摸消息,因为它已被有效释放。回收当前已加入的邮件或正在传递给处理程序的邮件是错误的。
public void recycle()

 类似资料:

相关阅读

相关文章

相关问答