?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
Message
譯者微博:http://t.qq.com/strongxu
版本:Android 3.1 r1
?
結構
繼承關系
public final class Message extends Object implements Parcelable
????????
java.lang.Object
android.os.Message
?
類概述
定義一個包含任意類型的描述數(shù)據(jù)對象,此對象可以發(fā)送給Handler。對象包含兩個額外的int字段和一個額外的對象字段,這樣可以使得在很多情況下不用做分配工作。
盡管Message的構造器是公開的,但是獲取Message對象的最好方法是調用Message.obtain()或者Handler.obtainMessage(), 這樣是從一個可回收對象池中獲取Message對象。
?
字段
public static final Creator<Message> CREATOR
?
?
public int arg1
如果只需要存儲幾個整型數(shù)據(jù),arg1 和 arg2是setData()的低成本替代品。
?
public int arg2
如果只需要存儲幾個整型數(shù)據(jù),arg1 和 arg2是setData()的低成本替代品。
?
public Object obj
發(fā)送給接收器的任意對象。當使用Message對象在線程間傳遞消息時,如果它包含一個Parcelable的結構類(不是由應用程序實現(xiàn)的類),此字段必須為非空(non-null)。其他的數(shù)據(jù)傳輸則使用setData(Bundle)方法。
注意Parcelable對象是從FROYO版本以后才開始支持的。
?
public Messenger replyTo
指明此message發(fā)送到何處的可選Messenger對象。具體的使用方法由發(fā)送者和接受者決定。
?
public int what
用戶自定義的消息代碼,這樣接受者可以了解這個消息的信息。每個handler各自包含自己的消息代碼,所以不用擔心自定義的消息跟其他handlers有沖突。
?
公共構造器
public ???? Message()???????
構造器(但是獲取Message對象的最好方法是調用Message.obtain())。
?
公共方法
public void copyFrom (Message o)
使此message跟參數(shù)o相似。淺拷貝數(shù)據(jù)域。不拷貝源message的鏈表字段,時間戳和目標/回調。
?
public int describeContents ()
描述了包含在Parcelable對象排列信息中的特殊對象的類型。
返回值
???????? 一個標志位,表明Parcelable對象特殊對象類型集合的排列。
?
public Runnable getCallback ()
獲取回調對象,此對象會在message處理時執(zhí)行。此對象必須實現(xiàn)Runnable接口?;卣{由接收此消息并分發(fā)的目標handler調用。如果沒有設置回調,此消息會分發(fā)到接收handler的handleMessage(Message)。
?
public Bundle getData ()
獲取附加在此事件上的任意數(shù)據(jù)的Bundle對象,需要時延遲創(chuàng)建。通過調用setData(Bundle)來設置Bundle的值。需要注意的是,如果通過Messenger對象在進程間傳遞數(shù)據(jù)時,需要調用Bundle類的Bundle.setClassLoader()方法來設置ClassLoader,這樣當接收到消息時可以實例化Bundle里的對象。
???????? 參考
?????????????????? peekData()
?????????????????? setData(Bundle)
?
public Handler getTarget ()
獲取將接收此消息的Handler對象。此對象必須要實現(xiàn)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的值。
???????? 參數(shù)
?????????????????? 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的值。
???????? 參數(shù)
?????????????????? h??????????????? 設置的target值
?????????????????? what ?????? 設置的what值
?????????????????? obj???????????? 設置的obj值
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public static Message obtain (Handler h, int what)
與obtain()一樣,但是設置了target和what的值。
???????? 參數(shù)
?????????????????? h??????????????? target的值
?????????????????? what???????? what的值
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public static Message obtain (Handler h)
與obtain()一樣,但是設置了target的值
???????? 參數(shù)
?????????????????? h??????????????? 消息對象的target成員的值
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public static Message obtain (Handler h, Runnable callback)
與obtain(Handler)一樣,但是設置回調函數(shù),在Message返回時調用。
???????? 參數(shù)
?????????????????? h??????????????? 消息對象的target成員的值
?????????????????? callback??? 當消息處理時會調用的回調函數(shù)
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public static Message obtain ()
從全局池中返回一個新的Message實例。在大多數(shù)情況下這樣可以避免分配新的對象。
?
public static Message obtain (Handler h, int what, int arg1, int arg2)
與obtain()一樣,但是設置了target, what, arg1和arg2的值
???????? 參數(shù)
?????????????????? h??????????????? 設置的targe值
?????????????????? what???????? 設置的what值
?????????????????? arg1????????? 設置的arg1值
?????????????????? arg2????????? 設置的arg2值
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public static Message obtain (Message obj)
同obtain(),但是從一個已存在的消息中拷貝值(包括它的目標)。
???????? 參數(shù)
?????????????????? orig?????????? 要拷貝的源消息
???????? 返回值
?????????????????? 從全局池中分配的一個Message對象。
?
public Bundle peekData ()
與getData()相似,但是并不延遲創(chuàng)建Bundle。如果Bundle對象不存在返回null。更多信息見getData()。
???????? 參考
?????????????????? getData()
?????????????????? setData(Bundle)
?
public void recyle ()
向全局池中返回一個Message實例。一定不能在調用此函數(shù)后再使用Message——它會立即被釋放。
?
public void sendToTarget ()
向Handler發(fā)送此消息,getTarget()方法可以獲取此Handler。如果這個字段沒有設置會拋出個空指針異常。
?
public void setData (Bundle data)
設置一個任意數(shù)據(jù)值的Bundle對象。如果可以,使用arg1和arg2域發(fā)送一些整型值以減少消耗。
參考
???????? getData()
???????? peekData()
?
public void setTarget (Handler target)
設置將接收此消息的Handler對象。
?
public String toString ()
返回一個Message對象簡單的,可讀懂的描述信息。鼓勵子類重寫此方法,實現(xiàn)時最好把對象的類型的數(shù)據(jù)考慮進去。默認的實現(xiàn)等同與以下表達式:
如果需要實現(xiàn)toString方法,參考Writing a useful toString method。
?????????????????? 返回值
??????????????????????????? 一個代表此對象的可打印字符串
?
public void writeToParcel (Parcel dest, int flags)
將類的數(shù)據(jù)寫入外部提供的Parcel中
參數(shù)
??????????????????????????? dest?? 對象被寫入的Parcel
??????????????????????????? flags 對象如何被寫入的附加標志,可能是0或PARCELABLE_WRITE_RETURN_VALUE。
??????????????????
?
補充
文章精選
Android中Message機制的靈活應用
Thread和Looper以及Handler和Message詳解
?
?