編輯: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詳解
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我
1、啟動虛擬機 2、我的android sdk在“E:\android\android開發環境\android SDK\platform-tools”把要安裝的a
這幾天因為項目需求,需要在ImageView上面疊加一層透明圓弧,並且在沿著圓弧的方向顯示相應的文字,效果如下圖所示: 拿到這個需求,首先想到的是自定義
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放