Поделиться через


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

Api IBinder ключа сопоставляется #transact transact()Binder#onTransact Binder.onTransact(). Эти методы позволяют отправлять вызов объекту IBinder и получать вызов, поступающий в объект Binder соответственно. Этот API транзакций синхронен, поэтому вызов #transact transact() не возвращается до тех пор, пока целевой объект не возвращается. Binder#onTransact Binder.onTransact()Это ожидаемое поведение при вызове объекта, существующего в локальном процессе, и базовый механизм обмена данными между процессами (IPC) гарантирует, что эти же семантики применяются при выполнении процессов.

Данные, отправленные через transact() — это универсальный Parcelбуфер данных, который также поддерживает некоторые метаданные о его содержимом. Метаданные используются для управления ссылками на объекты IBinder в буфере, чтобы эти ссылки могли поддерживаться при перемещении буфера между процессами. Этот механизм гарантирует, что когда IBinder записывается в посылку и отправляется в другой процесс, если другой процесс отправляет ссылку на тот же IBinder обратно в исходный процесс, исходный процесс получит тот же объект IBinder обратно. Эти семантики позволяют использовать объекты IBinder/Binder в качестве уникального удостоверения (для использования в качестве маркера или в других целях), которые могут управляться в процессах.

Система поддерживает пул потоков транзакций в каждом процессе, в котором он выполняется. Эти потоки используются для отправки всех IP-адресов, поступающих из других процессов. Например, когда IPC создается из процесса A в обработку B, вызывающий поток в блоках A в транзакциях() при отправке транзакции в процесс B. Следующий доступный поток пула в B получает входящие транзакции, вызывает Binder.onTransact() в целевом объекте и отвечает с результатом Parcel. После получения результата поток в процессе A возвращается, чтобы его выполнение продолжалось. В действительности другие процессы, как представляется, используются в качестве дополнительных потоков, которые не были созданы в собственном процессе.

Система Binder также поддерживает рекурсию между процессами. Например, если процесс A выполняет транзакцию для обработки B и обработки этой транзакции вызывает transact() в IBinder, реализуемой в A, поток в A, ожидающий завершения исходной транзакции, будет заботиться о вызове Binder.onTransact() объекта, вызываемого B. Это гарантирует, что семантика рекурсии при вызове объекта удаленного привязки совпадает с вызовом локальных объектов.

При работе с удаленными объектами часто требуется выяснить, когда они больше не являются допустимыми. Это можно определить тремя способами: <ul<>li> Метод #transact transact() вызовет RemoteException исключение, если вы пытаетесь вызвать его на IBinder, процесс которого больше не существует. <li> Метод #pingBinder() может вызываться и возвращает значение false, если удаленный процесс больше не существует. <#linkToDeath linkToDeath() li> Метод можно использовать для регистрации DeathRecipient в IBinder, который будет вызываться при удалении содержащего его процесса. </ul>

Документация по Java для android.os.IBinder.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Поля

DumpTransaction

Код транзакции протокола IBinder: дампа внутреннего состояния.

FirstCallTransaction

Первый код транзакции, доступный для команд пользователей.

InterfaceTransaction

Код транзакции протокола IBinder: допрос стороны получателя транзакции для дескриптора канонического интерфейса.

LastCallTransaction

Последний код транзакции, доступный для команд пользователей.

LikeTransaction

Код транзакции протокола IBinder: асинхронно сообщить приложению, что вызывающий объект любит его.

PingTransaction

Код транзакции протокола IBinder: pingBinder().

TweetTransaction

Код транзакции протокола IBinder: отправьте твит в целевой объект.

Свойства

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
InterfaceDescriptor

Получите каноническое имя интерфейса, поддерживаемого этим привязчиком.

IsBinderAlive

Проверьте, находится ли процесс, в который по-прежнему находится привязка.

JniIdentityHashCode

Возвращает значение java.lang.System.identityHashCode() для упаковаемого экземпляра.

(Унаследовано от IJavaPeerable)
JniManagedPeerState

Состояние управляемого однорангового узла.

(Унаследовано от IJavaPeerable)
JniPeerMembers

Поддержка доступа к членам и вызовов.

(Унаследовано от IJavaPeerable)
PeerReference

JniObjectReference Возвращает экземпляр объекта Java в оболочке.

(Унаследовано от IJavaPeerable)
SuggestedMaxIpcSizeBytes

Ограничение, которое должно быть помещено на размеры IPC в байтах, чтобы обеспечить их безопасность в пределах буфера транзакций.

Методы

Disposed()

Вызывается при удалении экземпляра.

(Унаследовано от IJavaPeerable)
DisposeUnlessReferenced()

Если нет невыполненных ссылок на этот экземпляр, то вызывается Dispose(); в противном случае ничего не делает.

(Унаследовано от IJavaPeerable)
Dump(FileDescriptor, String[])

Печать состояния объекта в заданном потоке.

DumpAsync(FileDescriptor, String[])

Как #dump(FileDescriptor, String[]) и всегда, но всегда выполняется асинхронно.

Finalized()

Вызывается при завершении экземпляра.

(Унаследовано от IJavaPeerable)
LinkToDeath(IBinderDeathRecipient, Int32)

Зарегистрируйте получателя для уведомления, если этот привязка исчезнет.

PingBinder()

Проверьте, существует ли объект.

QueryLocalInterface(String)

Попытайтесь получить локальную реализацию интерфейса для этого объекта Binder.

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)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Базовый интерфейс для ремотируемых объектов— основная часть упрощенного механизма вызова удаленной процедуры, предназначенная для обеспечения высокой производительности при выполнении вызовов внутри процесса и межпроцессных вызовов.

GetJniTypeName(IJavaPeerable)

Базовый интерфейс для ремотируемых объектов— основная часть упрощенного механизма вызова удаленной процедуры, предназначенная для обеспечения высокой производительности при выполнении вызовов внутри процесса и межпроцессных вызовов.

Применяется к