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