1.繼承關係
Java.lang.Object
|_____android.os.Message
實現Parcelable介面。
2.類概要
這個類定義了一個能夠發送給Handler對象的訊息,它包含了訊息的描述和任意資料對象。這個對象包含兩個int類型欄位和一個object類型欄位,這三個欄位在很多情況下不需要給其分配資料。
雖然Message類的構造器是公開的,但是擷取它的執行個體的最好的方法是:調用Message.obtain()方法或Handler.obtainMessage()方法,它們會從回收對象池中擷取一個廢棄的Message對象。
3.Public欄位
public static final Creator<Message> CREATOR
public int arg1:如果僅需要保持幾個整數,那麼使用arg1和arg2來替代setData()方法會降低系統開銷。
public int arg2:如果僅需要保持幾個整數,那麼使用arg1和arg2來替代setData()方法會降低系統開銷。
public Object obj :要發送給接受器的任意類型的對象。使用Messageer對象跨進程來發送訊息時,如果它包含了一個架構類的Parcelable實現(而不是由應用程式實現的),那麼這個對象只能是非空的。對於其他資料的傳輸要使用setData(Bundle)。
public Messenger replyto:設定能夠接收此訊息的回複的Messager對象。確切的語義應該使用寄件者和接受者。
public int what:使用者定義的訊息編碼,便於接受器能夠表示這個訊息。每個Handler對象都有它自己的訊息編碼命名空間,因此不需要擔心與其他的Handler發生衝突。
4.Public構造器
public Message()
構造器,但擷取Message對象最好方法是調用Message.obtain()方法。
5.Public方法
public void copyFrom(Message o)
對Message對象o的資料欄位執行影像拷貝。它不能複製被連結的列表欄位,也不能複製原始訊息的時間戳記、目標以及回調方法。
public int describeContents()
這個方法描述了Parcelable編組所包的特殊的對象的類型。
傳回值:一個位元遮罩,它指示了由Parcelable對象編組的特殊物件類型的集合。
public Runnable getCallback()
擷取訊息被處理時要執行的回調對象。這個對象必須實現Runnable介面。由目標Handler對象調用的這個對象會接受分發給它的Message對象。如果沒有設定,訊息會被分發給接受Handler對象的handleMessage(Message)方法。
public Bundle getData()
擷取跟本事件關聯的任意資料的Bundle對象。如果需要會延遲建立它。通過調用setData(Bundle)方法來設定要傳遞的值。要注意的是,當通過Messager對象跨進程傳遞資料時,需要通過Bundle.setClassLoader()方法來設定與Bundle相關的ClassLoader,以便在擷取資料時能夠執行個體化為具體的對象。
public Handler getTarget()
擷取接受訊息的Handler對象的實現。這個對象必須實現Handler.handleMessage()方法,每個Handler對象都有它自己的訊息編碼命名空間,因此不需要擔心與其他的Handler對象發生衝突。
public long getWhen()
以毫秒為單位,返回訊息被發送給目標的時間。
public static Message obtain(Handler h, int what, int arg1, int arg2, Object obj)
與obtain()方法相同,但是要設定target、what、arg1、arg2、和obj成員變數的值。
參數說明:
h:處理訊息的目標Handler對象;
what:訊息的編碼;
arg1:附加的整數資料;
arg2:附加的整數資料;
obj:附件的Object類型資料。
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain(Handler h, int what, Object obj)
與obtain()方法相同,但要設定target、what、和obj成員變數的值。
參數說明:
h:處理訊息的目標Handler對象;
what:訊息的編碼;
obj:附件的Object類型資料。
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain(Handler h, int what)
與obtain方法相同,但要設定與Message對象相關的target和what成員變數。
參數說明:
h:處理訊息的目標Handler對象;
what:訊息的編碼;
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain(Handler h)
與obtain方法相同,但要設定與Message對象相關的target和what成員變數。
參數說明:
h:處理訊息的目標Handler對象;
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain(Handler h, Runnable callback)
與obtain方法相同,但要給返回的Message對象分配一個Runnable對象。
參數說明:
h:處理訊息的目標Handler對象;
callback:處理訊息時要執行的Runnable對象。
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain()
從全域的對象池中返回一個新的Message執行個體,在很多情況下,這樣可以避免建立新對象的系統開銷。
public static Message obtain(Handler h, int what, int arg1, int arg2)
與obtain()方法相同,但要設定target、what、arg1、arg2成員變數的值。
參數說明:
h:處理訊息的目標Handler對象;
what:訊息的編碼;
arg1:附加的整數資料;
arg2:附加的整數資料;
傳回值:從全域的對象池中返回一個Message對象。
public static Message obtain(Message orig)
與obtain()方法相同,但它是把一個既存的Message對象(包括它的目標)複製到一個新的Message對象中。
參數說明:
orig:要複製的原始訊息。
傳回值:從全域的對象池中返回一個Message對象。
public Bundle peekData()
有點像getData(),但是它不會延遲建立Bundle對象,如果Bundle對象不存在,則返回null。
public void recycle()
把一個Message對象的執行個體返回給全域的對象池。調用這個方法後,就不必在關注這個Message對象了,它會被有效釋放。
public void sendToTarget()
把Message對象發送給有getTarget()方法所指定的Handler對象。如果這個成員變數沒有被設定,那麼會拋出一個null 指標異常。
public void setData(Bundle data)
給Message對象設定一個任意資料類型的Bundler對象。如果可以,使用arg1和arg2成員變數來發送簡單的整數值,可以有效降低系統開銷。
public void setTarget(Handler target)
設定處理本訊息的Handler對象。
public Sting toString()
返回一個簡明的,外行人能夠讀懂的對象描述。子類的實現中被鼓勵要覆寫這個方法,並且提供實現所要考慮的對象的類型和資料。預設實現如下:
getClass().getName()
+ '@'
+ Integer.toHexString(hashCode())
傳回值:返回一個可列印的對象的描述。
public void writeToParcel(Parcel dest, int flags)
把這個訊息對象合并到一個Parcel對象中。
參數說明:
dest:指定訊息對象應該被寫入的Parcel類型對象。
flags:指定訊息對象應該如何寫入Parcel對象的附加標記。可以是0或PARCELABLE_WRITE_RETURN_VALUE。