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 被寫入 Parcel 並送回另一個程序時,若該程序將該 IBinder 的引用回傳給原始程序,原始程序也會收到相同的 IBinder 物件。 這些語意使 IBinder/Binder 物件能作為唯一身份(作為標記或其他用途),並可跨程序管理。
系統會在每個執行的程序中維護一個交易執行緒池。 這些執行緒用於調度來自其他程序的所有 IPC。 例如,當 IPC 從程序 A 傳送到程序 B 時,A 中的呼叫執行緒會在 transact() 中阻塞,並將交易傳送至程序 B。B 中下一個可用的池執行緒接收到來的交易,呼叫目標物件上的 Binder.onTransact(),並回覆結果的 Parcel。 收到結果後,程序 A 的執行緒會回傳,讓執行繼續。 實際上,其他程序似乎會把你自己在程序中執行的額外執行緒當作你未建立的執行緒使用。
Binder 系統也支援跨程序遞迴。 例如,如果程序 A 執行交易以處理 B,並在處理該交易的同時呼叫 transact() 對由 A 實作的 IBinder 進行,則目前等待原始交易完成的 A 執行緒會負責呼叫 Binder.onTransact() 對 B 所呼叫的物件。這確保呼叫遠端綁定器物件時的遞迴語意與呼叫本地物件時相同。
在處理遠端物件時,你常常想知道它們何時不再有效。 有三種判斷方式: <ul><li>#transact transact() 如果你嘗試呼叫已不存在的 IBinder,該方法會拋出 RemoteException 例外。
<li> 可以呼叫該 #pingBinder() 方法,若遠端程序不復存在,則會回傳 false。
<li> 此 #linkToDeath linkToDeath() 方法可用於向 IBinder 註冊 a DeathRecipient ,當其包含的程序消失時,IBinder 會被呼叫。
</ul>
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
欄位
| 名稱 | Description |
|---|---|
| DumpTransaction |
IBinder 協議交易程式碼:dump 內部狀態。 |
| FirstCallTransaction |
這是第一個可用於使用者指令的交易代碼。 |
| InterfaceTransaction |
IBinder 協議交易代碼:查詢交易的接收端以取得其典型介面描述符。 |
| LastCallTransaction |
這是使用者指令最後可用的交易代碼。 |
| LikeTransaction |
IBinder 協定交易程式碼:非同步告訴應用程式呼叫者喜歡它。 |
| PingTransaction |
IBinder 協定交易代碼:pingBinder()。 |
| TweetTransaction |
IBinder 協議的交易程式碼:向目標物件發送推文。 |
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| InterfaceDescriptor |
取得此資料夾所支援介面的標準名稱。 |
| IsBinderAlive |
檢查一下活頁夾目前的流程是否仍在進行中。 |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
| SuggestedMaxIpcSizeBytes |
限制 IPC 大小(以位元組為單位)以安全控制在交易緩衝區限制以下。 |
方法
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |