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 物件做為唯一的身分識別(做為令牌或其他用途),以跨進程管理。
系統會在它執行的每個進程中維護交易線程集區。 這些線程可用來分派來自其他進程的所有 IPC。 例如,當 IPC 從進程 A 到處理 B 時,交易傳送至進程 B 時,交易傳送至進程 B 的 A 區塊中的呼叫線程。B 中的下一個可用集區線程會收到傳入交易、在目標物件上呼叫 Binder.onTransact(),並回復結果 Parcel。 收到其結果后,進程 A 中的線程會傳回以允許其執行繼續。 實際上,其他進程似乎會作為您未在自己的進程中建立執行的其他線程使用。
Binder 系統也支援跨進程遞歸。 例如,如果進程 A 在 A 中實作的 IBinder 上執行交易來處理 B,並在處理該交易時處理 B,則目前等候原始交易完成的 A 線程會負責在 B 所呼叫的物件上呼叫 Binder.onTransact()。這可確保呼叫遠端系結器物件時的遞歸語意與呼叫本機物件時相同。
使用遠端物件時,您通常會想要找出它們不再有效的時間。 有三種方式可以判斷: <ul><li> 方法 #transact transact()
會擲回 RemoteException
例外狀況,如果您嘗試在進程已不存在的 IBinder 上呼叫它。 <#pingBinder()
li> 可以呼叫 方法,如果遠端進程已不存在,則會傳回 false。 <li> 方法 #linkToDeath linkToDeath()
可用來向 IBinder 註冊 DeathRecipient
,當其包含的進程消失時,將會呼叫這個方法。 </ul>
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 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 |
傳 JniObjectReference 回已包裝 Java 物件實例的 。 (繼承來源 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) |
遠端物件的基底介面,這是輕量型遠端過程調用機制的核心部分,專為執行進程內和跨進程呼叫時高效能而設計。 |