2012-05-18 3 views
25

質問1:Javaの「スタブ」と「AIDL」とは何ですか?

私はAndroidのサービスを研究し、多くの場合、このようなコードを参照しています:

private ISampleService.Stub sampleServiceIf = new ISampleService.Stub(){} 

.Stub何ですが?

質問2:

私は「AIDL」をチェックし、私たちは代わりにJavaインタフェースファイルのそれを使用する必要がある理由を知りたいですか?

答えて

26

'スタブ(Stub)'は、ローカルインターフェースのようにリモートインターフェースを実装するクラスです。これは、データのマーシャリング/アンマーシャリング、およびリモートサービスとの送受信を処理します。 「スタブ」という用語は、一般に、他のRPCメソッド(COM、Javaリモート処理など)でこの機能を記述するために使用されますが、わずかに異なることを意味します。

IDL(Interface Definition Language)は一般的に言語に依存しないため、理論的にはC++またはPythonのスタブコードを生成できます。 Androidの1つはJavaベースですが、その区別は微妙です。 1つの違いは、.aidlファイルには1つのインタフェースのみを持つことができますが、Javaでは.javaファイルごとに複数のクラス/インタフェースが可能です。タイプがサポートされているいくつかのルールもあるので、Javaインターフェイスとまったく同じではなく、AIDLではなくタイプを使用することはできません。

+0

私はまだ混乱しています。多分私はもっと時間が必要です。異なるコンピュータ言語でのIPCの実装については同じですか?またはそれらは異なっていますが、それらのすべてがそのようなことをする必要があります。そして、特にSDKに基づくJavaでは、IDLを使用すると簡単になりますか?私はこれをこのように説明できますか? Nikolayありがとうございました。 – AmyWuGo

+1

これは一般的な概念です。 AndroidでAIDL以外のものを実装することはおそらく可能ですが、標準ではないため、唯一の標準的なRPCメカニズムとしてAIDLを考えることができます。 –

+0

ここから始めて基本的なアイデアを得ることができます:http://en.wikipedia.org/wiki/Remote_procedure_call –

関連する問題