Android中文API(126) —— Message

简介:

结构

继承关系

public final class Message extends Object implements Parcelabl

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  arg2setData()的低成本替代品。

public int arg2

如果只需要存储几个整型数据,arg1  arg2setData()的低成本替代品。

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调用。如果没有设置回调,此消息会分发到接收handlerhandleMessage(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, arg2obj的值。

         参数

                   h                设置的target

                   what         设置的what

                   arg1          设置的arg1

                   arg2          设置的arg2

                   obj             设置的obj

         返回值

                   从全局池中分配的一个Message对象。

public static Message obtain (Handler h, int what, Object obj)

obtain()一样,但是设置了target, whatobj的值。

         参数

                   h                设置的target

                   what        设置的what

                   obj             设置的obj

         返回值

                   从全局池中分配的一个Message对象。

public static Message obtain (Handler h, int what)

obtain()一样,但是设置了targetwhat的值。

         参数

                   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, arg1arg2的值

         参数

                   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对象。如果可以,使用arg1arg2域发送一些整型值以减少消耗。

参考

         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 对象如何被写入的附加标志,可能是0PARCELABLE_WRITE_RETURN_VALUE         

补充

文章精选

AndroidMessage机制的灵活应用

ThreadLooper以及HandlerMessage详解

本文转自博客园农民伯伯的博客,原文链接:Android中文API(126) —— Message,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
Android开发
Android 11 修改libcore update-api 遇到的问题
Android 11 修改libcore update-api 遇到的问题
154 1
|
28天前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
37 2
|
3月前
|
编译器 API Android开发
Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
本文介绍Kotlin Multiplatform (KMP) 中使用 `expect` 和 `actual` 关键字处理多平台API调用的方法。通过共通代码集定义预期API,各平台提供具体实现,编译器确保正确匹配,支持依赖注入、枚举类处理等,实现跨平台代码重用与原生性能。附带示例展示如何定义跨平台函数与类。
89 0
|
19天前
|
消息中间件 存储 Java
Android消息处理机制(Handler+Looper+Message+MessageQueue)
Android消息处理机制(Handler+Looper+Message+MessageQueue)
43 2
|
5月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
61 2
|
5月前
|
Java Linux API
微信API:探究Android平台下Hook技术的比较与应用场景分析
微信API:探究Android平台下Hook技术的比较与应用场景分析
|
6月前
|
SQL API Android开发
Android API:Activity.managedQuery()
Android API:Activity.managedQuery()
46 2
|
6月前
|
API 定位技术 开发工具
Android Studio2021.1.1 高德地图api调用这一篇就够了
Android Studio2021.1.1 高德地图api调用这一篇就够了
|
6月前
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
318 1
|
消息中间件 安全 Java