IBinder インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
リモートテーブル オブジェクトの基本インターフェイス。インプロセス呼び出しとクロスプロセス呼び出しの実行時に高パフォーマンスを実現するように設計された軽量リモート プロシージャ 呼び出しメカニズムの中核部分です。
[Android.Runtime.Register("android/os/IBinder", "", "Android.OS.IBinderInvoker")]
public interface IBinder : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("android/os/IBinder", "", "Android.OS.IBinderInvoker")>]
type IBinder = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 派生
- 属性
- 実装
注釈
リモートテーブル オブジェクトの基本インターフェイス。インプロセス呼び出しとクロスプロセス呼び出しの実行時に高パフォーマンスを実現するように設計された軽量リモート プロシージャ 呼び出しメカニズムの中核部分です。 このインターフェイスでは、リモート処理可能オブジェクトと対話するための抽象プロトコルについて説明します。 このインターフェイスは直接実装しないでください。代わりに次のインターフェイスから Binder
拡張します。
キー IBinder API が #transact transact()
次の値に Binder#onTransact Binder.onTransact()
一致します。 これらのメソッドを使用すると、IBinder オブジェクトへの呼び出しを送信し、Binder オブジェクトへの呼び出しをそれぞれ受信できます。 このトランザクション API は同期的であり、ターゲットからBinder#onTransact Binder.onTransact()
戻るまで呼び出し#transact transact()
は返されません。これは、ローカル プロセスに存在するオブジェクトを呼び出すときの予期される動作であり、基になるプロセス間通信 (IPC) メカニズムにより、プロセス間を移動するときにこれらの同じセマンティクスが確実に適用されます。
transact() を介して送信されるデータは Parcel
、データの一般的なバッファーであり、その内容に関するメタデータも保持します。 メタデータは、バッファー内の IBinder オブジェクト参照を管理するために使用され、バッファーがプロセス間を移動するにつれてそれらの参照を維持できます。 このメカニズムにより、IBinder がパーセルに書き込まれ、別のプロセスに送信されるときに、その他のプロセスがその同じ IBinder への参照を元のプロセスに送り返した場合、元のプロセスは同じ IBinder オブジェクトを受け取り戻します。 これらのセマンティクスを使用すると、IBinder/Binder オブジェクトをプロセス間で管理できる一意の ID (トークンとして、またはその他の目的で使用する) として使用できます。
システムは、実行される各プロセスでトランザクション スレッドのプールを保持します。 これらのスレッドは、他のプロセスから入ってくるすべての IPC をディスパッチするために使用されます。 たとえば、プロセス A からプロセス B に IPC が作成されると、A の呼び出し元スレッドはトランザクションをプロセス B に送信するときに transact() でブロックします。B の次の使用可能なプール スレッドは、受信トランザクションを受信し、ターゲット オブジェクトで Binder.onTransact() を呼び出し、結果のパーセルで応答します。 結果を受け取ると、プロセス A のスレッドは、実行を続行できるように戻ります。 実際には、他のプロセスは、独自のプロセスで実行を作成しなかった追加のスレッドとして使用されているように見えます。
バインダー システムでは、プロセス間の再帰もサポートされています。 たとえば、プロセス A が B を処理するトランザクションを実行し、A に実装されている IBinder で transact() を呼び出す処理中に B を処理する場合、元のトランザクションの完了を現在待機している A 内のスレッドは、B によって呼び出されるオブジェクトに対する Binder.onTransact() の呼び出しを処理します。これにより、リモート バインダー オブジェクトを呼び出すときの再帰セマンティクスは、ローカル オブジェクトを呼び出すときと同じになります。
リモート オブジェクトを操作する場合は、多くの場合、有効ではなくなったときに確認する必要があります。 これを決定 <するには、次の 3 つの方法があります。ul><li>#transact transact()
プロセスが存在しなくなった IBinder で呼び出そうとすると、メソッドは例外をスロー RemoteException
します。 <li> このメソッドは #pingBinder()
呼び出すことができます。リモート プロセスが存在しなくなった場合は false を返します。 <li> メソッドを #linkToDeath linkToDeath()
使用して IBinder に登録 DeathRecipient
できます。このメソッドは、含まれているプロセスが消えたときに呼び出されます。 </ul>
の Java ドキュメントandroid.os.IBinder
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。
フィールド
DumpTransaction |
IBinder プロトコル トランザクション コード: ダンプ内部状態。 |
FirstCallTransaction |
ユーザー コマンドで使用できる最初のトランザクション コード。 |
InterfaceTransaction |
IBinder プロトコル トランザクション コード: トランザクションの受信者側の正規インターフェイス記述子を問い合させます。 |
LastCallTransaction |
ユーザー コマンドで使用できる最後のトランザクション コード。 |
LikeTransaction |
IBinder プロトコル トランザクション コード: 呼び出し元が気に入っていることをアプリに非同期的に伝えます。 |
PingTransaction |
IBinder プロトコル トランザクション コード: pingBinder()。 |
TweetTransaction |
IBinder プロトコル トランザクション コード: ターゲット オブジェクトにツイートを送信します。 |
プロパティ
Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
InterfaceDescriptor |
このバインダーでサポートされているインターフェイスの正規名を取得します。 |
IsBinderAlive |
バインダーが存在するプロセスがまだ有効かどうかを確認します。 |
JniIdentityHashCode |
ラップされたインスタンスの |
JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
PeerReference |
ラップされた Java オブジェクト インスタンスの a JniObjectReference を返します。 (継承元 IJavaPeerable) |
SuggestedMaxIpcSizeBytes |
トランザクション バッファーの制限の下で安全に維持するために、IPC サイズに配置する必要がある制限 (バイト単位)。 |
メソッド
Disposed() |
インスタンスが破棄されたときに呼び出されます。 (継承元 IJavaPeerable) |
DisposeUnlessReferenced() |
このインスタンスへの未処理の参照がない場合は、呼び出 |
Dump(FileDescriptor, String[]) |
オブジェクトの状態を特定のストリームに出力します。 |
DumpAsync(FileDescriptor, String[]) |
同様 |
Finalized() |
インスタンスが終了したときに呼び出されます。 (継承元 IJavaPeerable) |
LinkToDeath(IBinderDeathRecipient, Int32) |
このバインダーが消え去った場合は、受信者を通知に登録します。 |
PingBinder() |
オブジェクトがまだ存在するかどうかを確認します。 |
QueryLocalInterface(String) |
この Binder オブジェクトのインターフェイスのローカル実装の取得を試みます。 |
SetJniIdentityHashCode(Int32) |
によって |
SetJniManagedPeerState(JniManagedPeerStates) |
リモートテーブル オブジェクトの基本インターフェイス。インプロセス呼び出しとクロスプロセス呼び出しの実行時に高パフォーマンスを実現するように設計された軽量リモート プロシージャ 呼び出しメカニズムの中核部分です。 (継承元 IJavaPeerable) |
SetPeerReference(JniObjectReference) |
によって |
Transact(Int32, Parcel, Parcel, TransactionFlags) |
オブジェクトを使用して汎用操作を実行します。 |
UnlinkToDeath(IBinderDeathRecipient, Int32) |
以前に登録された死亡通知を削除します。 |
UnregisterFromRuntime() |
ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。 (継承元 IJavaPeerable) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
リモートテーブル オブジェクトの基本インターフェイス。インプロセス呼び出しとクロスプロセス呼び出しの実行時に高パフォーマンスを実現するように設計された軽量リモート プロシージャ 呼び出しメカニズムの中核部分です。 |
GetJniTypeName(IJavaPeerable) |
リモートテーブル オブジェクトの基本インターフェイス。インプロセス呼び出しとクロスプロセス呼び出しの実行時に高パフォーマンスを実現するように設計された軽量リモート プロシージャ 呼び出しメカニズムの中核部分です。 |