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