深度剖析谷歌Android架构问题

移动开发 Android
下面进行对Android架构介绍,主要介绍的是Android中很重要也最为复杂的媒体播放器部分的架构,仅供大家学习思考。

想要充分的掌握Android架构的相关问题,那么就要对Android架构的性质、语句、变量、函数、预处理指令、输入和输出等内容进行了解掌握,这样就会使开发人员的工作效率提高。

对于Android架构这样一个完整又相对复杂的系统,一个MediaPlayer功能的实现不在其具体的功能,而是具体功能如何适应Android系统Android MediaPlayer的主要具体实现在OpenCore的Player中。

这部分不是本文的关注点,本文关注的是MediaPlayer系统的架构,其他的一些Android的应用程序也使用类似的架构对于开源事业在中国的发展,hanchao3c认为应该共享的不仅仅是代码,文档、设计思想、理念甚至对于技术的理解都应该得到充分的共享。

Android架构为中国人进入大规模的开源项目提供了很好的机遇,对于走在技术前沿的人们,不应将技术视为私有财产。而应该将自己理解更好地奉献给大众,提高大众的学习速度,从中也可以得到反馈,从而促进自己的进步。仅以此文奉献给所有关系技术的朋友,希望可以抛砖引玉,促进我们共同的技术进步!

在各个库中,libmedia.so位于核心的位置,它对上层的提供的接口主要是MediaPlayer类,类libmedia_jni.so通过调用MediaPlayer类提供对JAVA的接口,并且实现了android.media.MediaPlayer类。

libmediaplayerservice.so是Media的服务器,它通过继承libmedia.so的类实现服务器的功能,而libmedia.so中的另外一部分内容则通过进程间通讯和libmediaplayerservice.so进行通讯。libmediaplayerservice.so,

真正功能通过调用OpenCore Player来完成。MediaPlayer部分的头文件在frameworks/base/include/media/目录中,这个目录是和libmedia.so库源文件的目录frameworks/base/media/libmedia/相对应的。主要的头文件有以下几个:

  1. notify_callback_f notifyFunc)  
  2. {  
  3.     sp<MediaPlayerBase> p;  
  4.     switch (playerType) {  
  5.         case PV_PLAYER:  
  6.             LOGV(" create PVPlayer");  
  7.             p = new PVPlayer();  
  8.             break;  
  9.         case SONIVOX_PLAYER:  
  10.             LOGV(" create MidiFile");  
  11.             p = new MidiFile();  
  12.             break;  
  13.         case VORBIS_PLAYER:  
  14.             LOGV(" create VorbisPlayer");  
  15.             p = new VorbisPlayer();  
  16.             break;  
  17.     }  
  18. //……  
  19.     return p;  

在这些头文件mediaplayer.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。由于具有纯虚函数。

IMediaPlayerService 以及BnMediaPlayerService必须被继承实现才能够使用,在IMediaPlayerService定义的create和decode等接口。事实上是必须被继承者实现的内容。注意,create的返回值的类型是sp<IMediaPlayer>,这个IMediaPlayer正是提供实现功能的接口。

(OGG Vobis是一种音频压缩格式,与MP3等的音乐格式类似,它具有完全免费、开放和没有专利限制的特点。)值得注意的是PVPlayer、MidiFile和VorbisPlayer三个类都是继承MediaPlayerInterface得到的。

Android架构又是继承MediaPlayerBase得到的,因此三者具有相同接口类型。只有建立的时候会调用各自的构造函数,在建立之后,将只通过MediaPlayerBase接口来MediaPlayerBase控制它们。在frameworks/base/media/libmediaplayerservice目录中,MidiFile.h和MidiFile.cpp的实现MidiFile,VorbisPlayer.h和VorbisPlayer.cpp实现一个VorbisPlayer。

责任编辑:chenqingxiang 来源: IBMdW
相关推荐

2010-02-05 18:00:18

Android源代码

2010-02-07 15:42:46

Android单元测试

2010-02-01 13:34:59

Python 脚本

2010-03-05 16:38:30

2010-02-04 15:38:39

Android 手机

2024-03-12 12:57:07

Redis主从架构

2009-12-07 18:43:29

WCF框架

2010-02-23 10:05:52

Python历史

2010-03-02 09:42:42

Android平台

2010-02-05 15:33:29

Android JDK

2010-02-07 14:29:10

Android SDK

2010-01-08 14:06:49

JSON 形式

2010-03-01 16:48:02

Python模块

2012-05-11 10:38:15

Cloud Found

2010-05-24 16:58:44

SVN安装

2010-02-04 14:01:44

Android应用

2010-01-27 15:50:23

C++复杂性

2010-01-27 09:31:39

C++Test测试

2010-02-07 15:29:41

Android问题

2010-03-03 13:56:24

点赞
收藏

51CTO技术栈公众号