您链接到的图表不是很清楚,但我假设蓝色的 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
方法。