1Music.apkjavaMediaPlayer至libmediaMediaPlayer(JNI

StartJava空间代码,在框架层的frameworks/base/media/java/android/media/mediaPlayer.java中,

通过JNIandroidbinder机制,向C++空间调用实现;向上打包成mediaplayer库提过给应用开发使用。

    /**描述:     * Starts or resumes playback. If playback had previously been paused,     * playback will continue from where it was paused. If playback had     * been stopped, or never started before, playback will start at the     * beginning.     *     * @throws IllegalStateException if it is called in an invalid state     */    public  void start() throws IllegalStateException {        stayAwake(true);        _start();    }

privatenativevoid_start()throwsIllegalStateException;

_start是本地方法,会通过JNI调用android的实现,实现代码位置在:

frameworks/base/media/jni/android_media_MediaPlayer.cpp

JNINativeMethodgMethods[]数组中定义了JVMC++函数对应关系,包括函数名称和传递参数对应,

{"_start","()V",(void*)android_media_MediaPlayer_start},

其中:

_start”是java空间函数名称

()V”是java空间参数和函数类型,括号内为参数,用;分开多个参数,括号后面跟着函数类型,Vvoid意思,Iint意思等等

(void*)android_media_MediaPlayer_start”是对应C++空间函数类型和函数名称

static voidandroid_media_MediaPlayer_start(JNIEnv *env, jobject thiz){    LOGV("start");    sp<MediaPlayer> mp = getMediaPlayer(env, thiz);    if (mp == NULL ) {        jniThrowException(env, "java/lang/IllegalStateException", NULL);        return;    }    process_media_player_call( env, thiz, mp->start(), NULL, NULL );}

JNIEnv*env本地空间的资源,jobjectthiz是java空间资源;getMediaPlayer(env,thiz)先从java空间资源中获取对应本地资源,返回类型为MediaPlayer指针;process_media_player_call调用MediaPlayer类的方法start。至此,已经完成从java空间的start到本地实现中的start调用关系,后面start怎么实现就是service的事情了。


Music.apk的方法startpause/resumestop,到C++实现startpause/resumestop的调用流程是一样的



更多相关文章

  1. Android sql数据库的Android包里面的函数介绍
  2. 基本空间划分
  3. Android中调用C++函数的一个简单Demo
  4. Android的参数大致分成两块:系统服务参数和平台系统信息。
  5. 使用android中drawline函数无法绘制水平线的解决办法
  6. WebView与Javascript交互(相互调用参数、传值)
  7. Android 获取View的位置参数:x,y和相对父容器的偏移量以及中心点
  8. Android核心技术-day02-03-获取手机内部存储空间
  9. android 随手记之文件+参数上传请求

随机推荐

  1. ADB使用小结
  2. App列表之下拉刷新
  3. Android(安卓)MVP 模式 项目初体验(一)
  4. 控制android弹出框不消失(用到反射的方法
  5. 木瓜(Papaya) Android开发者创业大赛即将
  6. Android(安卓)GPRS的自动打开与关闭
  7. Android之在ubuntu上用aapt查看apk的名字
  8. Android信息推送—AndroidPN的学习(上)
  9. 给Android新手的一些学习建议
  10. Android(安卓)8.0以上系统应用如何保活