前言

  本章内容是android.os.Message,版本为Android 3.1 r1,翻译来自"strongxu",欢迎访问他的微薄"http://t.qq.com/strongxu",再次感谢"strongxu"!欢迎你一起参与Android的中文翻译,联系我over140@gmail.com。

声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com/

    Android中文翻译组:http://goo.gl/6vJQl

Message

译者署名: strongxu

译者微博:http://t.qq.com/strongxu

版本:Android 3.1 r1

结构

继承关系

public final class Message extends Object implements Parcelable

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 和 arg2是setData()的低成本替代品。

public int arg2

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

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

参数

h                设置的target值

what         设置的what值

arg1          设置的arg1值

arg2          设置的arg2值

obj             设置的obj值

返回值

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

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

与obtain()一样,但是设置了target, what和obj的值。

参数

h                设置的target值

what        设置的what值

obj             设置的obj值

返回值

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

public static Message obtain (Handler h, int what)

与obtain()一样,但是设置了target和what的值。

参数

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, arg1和arg2的值

参数

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

参考

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

补充

文章精选

Android中Message机制的灵活应用

Thread和Looper以及Handler和Message详解

Android中文API(126) —— Message相关推荐

  1. Android中文API(127) —— MessageQueue

    结构 继承关系 public class MessageQueue extends Object java.lang.Object android.os.MessageQueue 类概述 保存消息列表 ...

  2. Android 中文API合集(4)(102篇)(chm格式)

    前言 Android中文翻译组 , Android 中文chm , Android 中文pdf , android 中文 api Android中文翻译组第四个chm格式合集,收集整理102篇译文制作 ...

  3. Android ----中文Api 百度地图

    Android中文API最新中文版 [复制链接]     kupe kupe当前离线 在线时间 1 小时 e望 0 点 最后登录 2011-2-17 注册时间 2011-2-17 积分 12 阅读权限 ...

  4. Android 中文API合集 最终版,androi中文api合集.doc

    androi中文api合集 HYPERLINK "/over140/archive/2011/01/04/1925146.html" Android 中文API合集(3)(83篇) ...

  5. Android 中文API (94) —— MediaController

    前言 本章内容是android.widget.MediaController,版本为Android 2.3 r1,翻译来自"唐明",再次感谢"唐明" !期待你一 ...

  6. Android 中文 API 文档 (45) —— AbsoluteLayout.LayoutParams

    前言 本章内容是 android.widget.AbsoluteLayout.LayoutParams,版本为Android 2.2 r1,翻译来自"绵白糖",再次感谢" ...

  7. Android 中文API (92) —— MenuInflater

    前言 本章内容是android.view.MenuInflater,版本为Android 2.3 r1,翻译来自"獨鍆躌踄",欢迎大家访问他的博客:http://www.cnblo ...

  8. Android 中文 API (90) —— WindowManager

    一.结构 public interface WindowManager extends android.view.ViewManager android.view.WindowManager 二.概述 ...

  9. Android 中文API (70) —— BluetoothDevice[蓝牙]

    前言 本章内容是 android.bluetooth.BluetoothDevice,为Android蓝牙部分的章节翻译.蓝牙设备类,代表了蓝牙通讯国足中的远端设备.版本为 Android 2.3 r ...

  10. android 中文 API (41) —— RatingBar.OnRatingBarChangeListener

    前言 本章内容是 android.widget.RatingBar.OnRatingBarChangeListener,版本为Android 2.2 r1,翻译来自madgoat,欢迎大家访问他的博客 ...

最新文章

  1. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容
  2. python编程 从入门到实践豆瓣-三周刷完《Python编程从入门到实践》的感受
  3. postgresql 基本语法
  4. c#的http服务器和客户端实例
  5. 把html文件变成php,怎么把动态的php文件转换成静态的html文件,html文件是php文件…...
  6. Intellij Idea搭建Spark开发环境
  7. android logcat 根据包名过滤,adb logcat通过包名过滤(dos命令find后跟变量)
  8. Which path should be used jdk or jre for JAVA_HOME environment variable?
  9. 机器视觉:偏振镜光学原理和在机器视觉中的应用
  10. Java工作流有哪些?如何快速掌握Java技术
  11. SEM和SEO的区别
  12. 看我如何自制安全的远程控制工具
  13. 有些人二十几岁就提前退休了,凭什么?
  14. 荣耀V40用机技巧有哪些
  15. 局域网病毒入侵原理和防御
  16. JavaScript typeof, null, 和 undefined
  17. 使用zerotier one实现内网穿透及MOON架设过程整理
  18. Button点击事件
  19. beecloud轻松实现支付
  20. mac 浏览器解决跨域问题

热门文章

  1. 推销自己的前端技术书籍
  2. Macaca基础原理解析
  3. SQLite数据库浅谈
  4. Linux中expect命令实现交互,修改VNCPASSWD
  5. 网络学习(三)安装VMware Workstation 7
  6. cacti 监控平台部署心得
  7. windows做ntp server,linux做ntp client端的配置方法
  8. 曼彻斯特解密_【专利解密】捷通科技改良VLC芯片,照明通信两不误
  9. golang new和make却别
  10. php+apache 和 php+nginx的区别