バインダーの仕組み、使い方、ソースコード

バインダーメカニズムはAndroid内でプロセス間通信 (IPC) を実現する機能で、カーネルが提供するIPCメカニズムを利用しており、異なるプロセス間の通信に使用されています。

バインダーの仕組みは、

  1. Linuxカーネルでは、バイダーのドライバーが、バイダーデバイスというbindrという名前のキャラクタデバイスノードを作成し、そのデバイスノードを通して、バイダー機構を利用するすべてのプロセスが通信できます。
  2. バインダーの仕組みでは、各プロセスはバインダーノードを持っており、他のプロセスと通信ができます。
  3. 各Binderのノードは、リモートオブジェクトを格納するプロセス内を示すBinderオブジェクト(BinderProxy)というユニークな識別子を持ちます。
  4. プロセスが他のプロセスと通信を行う際には、バインダーノードを介してバインダードライバへリクエストを送信し、そこで必要なデータをやり取りします。
  5. バインダードライバは、リクエストをターゲットプロセスのバインダーノードに転送し、ターゲットプロセスのバインダーサービス(BinderService)にリクエスト処理を誘発します。
  6. ターゲットプロセスのバインダーサービスは、リクエストの処理が終わると、その結果をバインダーに返し、そのドライバによってリザルトはリクエストプロセスのバインダーノードに渡されます。
  7. リクエストしたプロセスに結果を返す、リクエストしたプロセスのバインダノードを介してプロセス間通信を完了します。

Binderメカニズムを使用する:

  1. Binderサービスを継承し、リモートインターフェースメソッドを実装するバインダーサービスを作成します。
  2. サーバプロセスにおいて、そのバインダサービスクラスをシステムサービスに登録し、他のプロセスがバインダノードを介してサービスにアクセスできるようにする。
  3. クライアントプロセスでは、バインダーノードを介してサーバープロセス内のバインダーオブジェクトを取得し、提供されたメソッドを呼び出して通信します。

Binder 機構のソースコード:

バインダー関連のソースコードの主な部分は、frameworks/base/core/java/android/os/ディレクトリにあります。具体的には Binder.java、BinderService.java、Parcel.java などのファイルです。

具体的なソースコードはAndroidのソースコードで確認することができます。

bannerAds