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對象。如果這個成員變量沒有被設置,那么會拋出一個空指針異常。
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。