Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android中文API(126) —— Message

Android中文API(126) —— Message

編輯:Android開發實例

前言

  本章內容是android.os.Message,版本為Android 3.1 r1,翻譯來自"strongxu。
 

 

 

 

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詳解

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved