深度剖析谷歌Android架構(gòu)問題
想要充分的掌握Android架構(gòu)的相關(guān)問題,那么就要對(duì)Android架構(gòu)的性質(zhì)、語(yǔ)句、變量、函數(shù)、預(yù)處理指令、輸入和輸出等內(nèi)容進(jìn)行了解掌握,這樣就會(huì)使開發(fā)人員的工作效率提高。
對(duì)于Android架構(gòu)這樣一個(gè)完整又相對(duì)復(fù)雜的系統(tǒng),一個(gè)MediaPlayer功能的實(shí)現(xiàn)不在其具體的功能,而是具體功能如何適應(yīng)Android系統(tǒng)Android MediaPlayer的主要具體實(shí)現(xiàn)在OpenCore的Player中。
這部分不是本文的關(guān)注點(diǎn),本文關(guān)注的是MediaPlayer系統(tǒng)的架構(gòu),其他的一些Android的應(yīng)用程序也使用類似的架構(gòu)對(duì)于開源事業(yè)在中國(guó)的發(fā)展,hanchao3c認(rèn)為應(yīng)該共享的不僅僅是代碼,文檔、設(shè)計(jì)思想、理念甚至對(duì)于技術(shù)的理解都應(yīng)該得到充分的共享。
Android架構(gòu)為中國(guó)人進(jìn)入大規(guī)模的開源項(xiàng)目提供了很好的機(jī)遇,對(duì)于走在技術(shù)前沿的人們,不應(yīng)將技術(shù)視為私有財(cái)產(chǎn)。而應(yīng)該將自己理解更好地奉獻(xiàn)給大眾,提高大眾的學(xué)習(xí)速度,從中也可以得到反饋,從而促進(jìn)自己的進(jìn)步。僅以此文奉獻(xiàn)給所有關(guān)系技術(shù)的朋友,希望可以拋磚引玉,促進(jìn)我們共同的技術(shù)進(jìn)步!
在各個(gè)庫(kù)中,libmedia.so位于核心的位置,它對(duì)上層的提供的接口主要是MediaPlayer類,類libmedia_jni.so通過調(diào)用MediaPlayer類提供對(duì)JAVA的接口,并且實(shí)現(xiàn)了android.media.MediaPlayer類。
libmediaplayerservice.so是Media的服務(wù)器,它通過繼承l(wèi)ibmedia.so的類實(shí)現(xiàn)服務(wù)器的功能,而libmedia.so中的另外一部分內(nèi)容則通過進(jìn)程間通訊和libmediaplayerservice.so進(jìn)行通訊。libmediaplayerservice.so,
真正功能通過調(diào)用OpenCore Player來完成。MediaPlayer部分的頭文件在frameworks/base/include/media/目錄中,這個(gè)目錄是和libmedia.so庫(kù)源文件的目錄frameworks/base/media/libmedia/相對(duì)應(yīng)的。主要的頭文件有以下幾個(gè):
- notify_callback_f notifyFunc)
- {
- sp<MediaPlayerBase> p;
- switch (playerType) {
- case PV_PLAYER:
- LOGV(" create PVPlayer");
- p = new PVPlayer();
- break;
- case SONIVOX_PLAYER:
- LOGV(" create MidiFile");
- p = new MidiFile();
- break;
- case VORBIS_PLAYER:
- LOGV(" create VorbisPlayer");
- p = new VorbisPlayer();
- break;
- }
- //……
- return p;
- }
在這些頭文件mediaplayer.h提供了對(duì)上層的接口,而其他的幾個(gè)頭文件都是提供一些接口類(即包含了純虛函數(shù)的類),這些接口類必須被實(shí)現(xiàn)類繼承才能夠使用。由于具有純虛函數(shù)。
IMediaPlayerService 以及BnMediaPlayerService必須被繼承實(shí)現(xiàn)才能夠使用,在IMediaPlayerService定義的create和decode等接口。事實(shí)上是必須被繼承者實(shí)現(xiàn)的內(nèi)容。注意,create的返回值的類型是sp<IMediaPlayer>,這個(gè)IMediaPlayer正是提供實(shí)現(xiàn)功能的接口。
(OGG Vobis是一種音頻壓縮格式,與MP3等的音樂格式類似,它具有完全免費(fèi)、開放和沒有專利限制的特點(diǎn)。)值得注意的是PVPlayer、MidiFile和VorbisPlayer三個(gè)類都是繼承MediaPlayerInterface得到的。
而Android架構(gòu)又是繼承MediaPlayerBase得到的,因此三者具有相同接口類型。只有建立的時(shí)候會(huì)調(diào)用各自的構(gòu)造函數(shù),在建立之后,將只通過MediaPlayerBase接口來MediaPlayerBase控制它們。在frameworks/base/media/libmediaplayerservice目錄中,MidiFile.h和MidiFile.cpp的實(shí)現(xiàn)MidiFile,VorbisPlayer.h和VorbisPlayer.cpp實(shí)現(xiàn)一個(gè)VorbisPlayer。




















