使用
soundpool
mediaplayer
顯得有些不太適合了。由於
mediaplayer
存在例如以下缺點:
1)延時時間較長,且資源佔用率高。
2)android
中除了mediaplayer
soundpool
soundpool
使用音效池的概念來管理多個短促的音效,比如它能夠開始就載入
20個音效。以後在程式中按音效的id
soundpool
提供了乙個構造器,
該構造器能夠指定它總共支援多少個聲音(也就是池的大小)、聲音的品質等。構造器例如以下:
soundpool(int maxstreams, int streamtype, int srcquality)
:第乙個引數指定支援多少個聲音;第二個引數指定聲音型別:第三個引數指定聲音品質。
一旦得到了soundpool物件之後,接下來就可呼叫soundpool的多個過載的load方法來載入聲音了。
soundpool
提供了例如以下4個
load
方法:
int load(context context, int resld, int priority)
:從resld
所相應的資源載入聲音。
int load(filedescriptor fd, long offset, long length, int priority
):載入
fd 所相應的檔案的
offset
開始、長度為
length
的聲音。
int load(assetfiledescriptor afd, int priority)
:從afd
所相應的檔案裡載入聲音。
int load(string path, int priority):從
path
相應的檔案去載入聲音。
上面4個方法中都有乙個priority引數,該引數眼下還沒有不論什麼作用,android建議將該 引數設為1,保持和未來的相容性。
上面4個方法載入聲音之後,都會返回該聲音的的
id,以後程式就能夠通過該聲音的
id
soundpool
int play(int soundid, float leftvolume, float rightvolume, int priority, int loop, float rate)
leftvolume
、rightvolume
指定左、右的音量:
priority
loop
指定是否迴圈,
0為不迴圈,
-1為迴圈。
rate
0.5到2,
1為正常比率。
為了更好地管理soundpool所載入的每乙個聲音的1d,程式通常會使用乙個hashmap,integer>物件來管理聲音。
歸納起來,使用
soundpool
1)呼叫soundpool
的構造器建立
soundpool
的物件。
2)呼叫soundpool
物件的load()
方法從指定資源、檔案裡載入聲音。
最好使用hashmap< integer, integer>
來管理所載入的聲音。
3)呼叫soundpool
的play
以下的程式示範了怎樣使用
soundpool
程式**例如以下:
publicclasssoundpooldemoextendsactivity
} };
btn1
.setonclicklistener(listener);
btn2
.setonclicklistener(listener);
btn3
.setonclicklistener(listener);
} }程式執行效果圖:
實際使用
soundpool
soundpool
儘管能夠一次性載入多個聲音。但因為記憶體限制,因此應該避免使用
soundpool
soundpool
儘管soundpool
比mediaplayer
的效果好,但也不是絕對不存在延遲問題。尤其在那些效能不太好的手機中,
soundpool
的延遲問題會更嚴重。
Android開發之簡訊
1.sms主要結構 id 簡訊序號,如100 thread id 對話的序號,如100,與同乙個手機號互發的簡訊,其序號是相同的 person 發件人,如果發件人在通訊錄中則為具體姓名,陌生人為null date 日期,long型,如1346988516,可以對日期顯示格式進行設定 protocol...
Android開發之SparseArray簡介
1 定義 sparsearray,即稀疏陣列,這個物件和hashmap類似,也是乙個容器,但是它的key是整數型別。2 特點 sparsearray不需要對key和value進行auto boxing 將原始型別封裝為物件型別,比如把int型別封裝成integer型別 結構比hashmap簡單 sp...
Android開發之服務
建立服務時會自動繼承service類,service類中有乙個onbind 方法,這是唯一乙個抽象的方法,然後我們一般需要重寫oncreate onstartcommand ondestory 方法,其中oncreate 只在建立服務的時候才會呼叫,這一點和onstartcommand 是有區別的,...