0

ビデオプレーヤーの内部の詳細を検索しているときに、クラスがすべてのメッセージ (つまり、、、など) に内部的に使用し、同じMediaPlayerメッセージで呼び出すpdfを見つけました。私の質問は、クラスを介して呼び出す代わりに直接呼び出すことができないのはなぜですか?android_media_MediaplayersetDataSource()prepare()start()android_media_MediaPlayerlibmedia::MediaPlayer()MediaPlayerlibmedia::MediaPlayerandroid_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
が呼び出されると、ネイティブ MediaPlayer のメソッドandroid_media_MediaPlayer_prepareAsyncが呼び出されます。prepareAsync

于 2013-03-27T15:52:11.247 に答える