androidのAIDL
を理解するには、実際の例が1つ必要です。これは、AIDL
を使用する必要がある開発シナリオを意味します。
Android Docs ...を読むと、混乱して非常に多くの質問にさらされるので、ドキュメント全体を読むのは難しいです。
電話の外と通信するためのものです。
または別のアプリと通信するため(他のアプリと通信する必要がある理由)
ドキュメントで話しているサービスの種類
AIDLはバインダーに使用されます。バインダーは、Androidサービス上/からRPC呼び出しを行うメカニズムです。
AIDLを使用する場合サービスが必要な場合。いつサービスが必要ですか?データを共有したい場合and別のアプリケーションで何かを制御するには、インターフェースとしてAIDLを使用するサービスが必要です。 (コンテンツプロバイダーは、データを共有する場合にのみ使用されます)。
サービスは、MVCパターンのモデルロールとしてアプリケーション内で使用できます。
AIDLはAndroidインターフェイス定義言語です。これにより、基本的にIPC呼び出しを行うことができます。
使用:特定の情報を取得するために、1つのプロセスが他のプロセスと対話する必要がある状況があります。
例:プロセスAは、コールタイプを変更する必要があるかどうかを判断するために、コールステータスの情報が必要です(たとえば、オーディオからビデオコールまたはその逆)。特定のリスナーから通話ステータスを取得できますが、通話タイプをオーディオからビデオに変更するには、プロセスAを変更するためのフックが必要です。この「フック」またはコールを変更する方法は、通常、テレフォニープロセスの一部であるテレフォニークラスの一部です。したがって、テレフォニープロセスからそのような情報を取得するために、テレフォニーサービス(Androidテレフォニープロセス)の一部として実行されます)を記述できます。 プロセスA(クライアント)はこれを使用していますリモートサービスこれはテレフォニープロセスと通信してコールタイプを変更するため、 Telephony serviceはプロバイダーであり、Process A(client)はユーザーであるため、サービスと通信するにはinterfaceが必要です。どちらも、理解して順守できるインターフェース(プロトコル)について合意する必要があります。このようなインターフェースは[〜#〜] aidl [〜#〜]であり、(リモートサービス経由で) )テレフォニープロセスに移行し、いくつかの作業を完了します。
簡単に言えば、AIDLはクライアントが取得する「合意」であり、サービスと話す方法を伝えます。サービス自体にその契約のコピーが含まれます(クライアント向けに公開されているため)。サービスは、リクエストが到着したときの処理方法の詳細を実装するか、誰かがリクエストに話しかけたときに発声します
したがって、プロセスAはサービスを介してコールを変更するように要求し、サービスはその要求を取得し、テレフォニープロセス(その一部であるため)と通信し、コールをビデオに変更します。
注意すべき重要な点は、AIDLはマルチスレッド環境でのみ必要であることです。マルチスレッド化されたArchを処理する必要がない場合は、Bindersを廃止できます。
もう1つの実例は、Google PlayライセンスがAIDLを使用していることです。
AIDLを使用してアプリ/プロセス間の通信を行うことができます
例:APP_A、APP_B、APP_Cの3つのアプリがあるとします。3つのアプリすべてに共通の機能があるとすると、すべてのアプリに同じコードを記述する代わりに、実行する個別のAPP_AIDL(サービスの検索)を作成できます。バックグラウンドで。
1-電話の外と通信するためのものです。アプリの外と通信します。
2-または別のアプリと通信するため(他のアプリと通信する必要がある理由)@ GodOnScooterが述べたように、アプリが通信するとき実際には別の部分である電話サービスを使用します。
3-ユーザーがドキュメントで話しているサービスの種類は何ですか?
これはシステムの異なるプロセスで実行されるサービスです。このサービスにバインドするには、IPC(プロセス間通信)が必要です。AIDLを使用してこれを実装します。