0

在搜索视频播放器的内部详细信息时,我遇到了一个 pdf,其中MediaPlayer类在内部android_media_Mediaplayer用于每条消息(即setDataSource()prepare()start())并使用相同的消息进行android_media_MediaPlayer调用。libmedia::MediaPlayer()我的问题是为什么不能MediaPlayer直接调用libmedia::MediaPlayer而不是通过调用android_media_MediaPlayer

谢谢!

图片链接如下...

http://img600.imageshack.us/img600/2005/capturejij.png

4

1 回答 1

0

您链接到的图表不是很清楚,但我假设蓝色的 MediaPlayer 框是指 MediaPlayer Java 类。

libmedia MediaPlayer 是一个原生类。Java 和 C/C++ 之间的调用需要通过 Java Native Interface (JNI),因此 android_media_MediaPlayer 包含与 MediaPlayer Java 类通信所需的 JNI 代码,从而充当 Java 类和本机 libmedia 类之间的一种代理.

例如,在 MediaPlayer.java 你会发现这个声明:

public native void prepareAsync() throws IllegalStateException;

在 android_media_MediaPlayer 中作为 JNINativeMethod 列出:

{"prepareAsync", "()V", (void *)android_media_MediaPlayer_prepareAsync},

这表示 Java 称为“ prepareAsync”的方法具有签名“ ()V”(无参数,返回void)并对应于本机函数android_media_MediaPlayer_prepareAsync
android_media_MediaPlayer_prepareAsync被调用时,它会依次调用本机 MediaPlayer 的prepareAsync方法。

于 2013-03-27T15:52:11.247 回答