語言

IBinder 介面

定義

可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。

[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>

Java 文件 android.os.IBinder。

本頁部分內容為基於 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

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)
SuggestedMaxIpcSizeBytes

限制 IPC 大小(以位元組為單位)以安全控制在交易緩衝區限制以下。

方法

名稱 Description
AddFrozenStateChangeCallback(IExecutor, IBinder+IFrozenStateChangeCallback)

此方法提供回調機制,以通知程序凍結/解凍事件。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Dump(FileDescriptor, String[])

將物件的狀態印入給定的串流中。

DumpAsync(FileDescriptor, String[])

但 #dump(FileDescriptor, String[]) 總是非同步執行。

Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

如果這個資料夾消失,請為收件人登記通知。

PingBinder()

檢查該物件是否仍然存在。

QueryLocalInterface(String)

嘗試取得此 Binder 物件的本地介面實作。

RemoveFrozenStateChangeCallback(IBinder+IFrozenStateChangeCallback)

取消註冊一個 FrozenStateChangeCallback 。 當主機程序改變凍結狀態時,回調將不再被啟動。

SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode。

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference。

(繼承來源 IJavaPeerable)
Transact(Int32, Parcel, Parcel, TransactionFlags)

對物件執行一個通用操作。

UnlinkToDeath(IBinderDeathRecipient, Int32)

移除先前登記的死亡通知。

UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

可重帶物件的基礎介面,是輕量級遠端程序呼叫機制的核心部分,設計用於執行進程內及跨進程呼叫時的高效能。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於