다음을 통해 공유


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 개체에 대한 호출을 보내고 각각 바인더 개체에 들어오는 호출을 받을 수 있습니다. 이 트랜잭션 API는 대상이 반환될 때까지 호출 #transact transact() 이 반환되지 않도록 동기적입니다. 로컬 프로세스에 Binder#onTransact Binder.onTransact()존재하는 개체를 호출할 때 예상되는 동작이며, 기본 IPC(프로세스 간 통신) 메커니즘은 프로세스 간에 진행될 때 동일한 의미 체계가 적용되도록 합니다.

transact()를 통해 전송되는 Parcel데이터는 데이터의 제네릭 버퍼로, 콘텐츠에 대한 일부 메타 데이터도 유지 관리합니다. 메타 데이터는 버퍼에서 IBinder 개체 참조를 관리하는 데 사용되므로 버퍼가 프로세스 간에 이동할 때 이러한 참조를 유지할 수 있습니다. 이 메커니즘은 IBinder가 소포에 기록되고 다른 프로세스로 전송될 때 다른 프로세스가 동일한 IBinder에 대한 참조를 원래 프로세스로 다시 보내는 경우 원래 프로세스에서 동일한 IBinder 개체를 다시 받도록 합니다. 이러한 의미 체계를 사용하면 IBinder/Binder 개체를 프로세스 간에 관리할 수 있는 고유한 ID(토큰 또는 다른 용도로 사용)로 사용할 수 있습니다.

시스템은 실행되는 각 프로세스에서 트랜잭션 스레드 풀을 유지 관리합니다. 이러한 스레드는 다른 프로세스에서 들어오는 모든 IPC를 디스패치하는 데 사용됩니다. 예를 들어 프로세스 A에서 B를 처리하기 위해 IPC가 만들어지면 트랜잭션을 전송하여 B를 처리할 때 A의 호출 스레드가 transact()에서 차단됩니다. B에서 사용 가능한 다음 풀 스레드는 들어오는 트랜잭션을 수신하고, 대상 개체에서 Binder.onTransact()를 호출하고, 결과 Parcel로 회신합니다. 결과를 받으면 프로세스 A의 스레드가 반환되어 실행을 계속할 수 있습니다. 실제로 다른 프로세스는 사용자 고유의 프로세스에서 실행을 만들지 않은 추가 스레드로 사용하는 것으로 보입니다.

바인더 시스템은 프로세스 간 재귀도 지원합니다. 예를 들어 프로세스 A가 B를 처리하는 트랜잭션을 수행하고 A에서 구현된 IBinder에서 트랜잭션 호출 transact()를 처리하는 동안 B를 처리하는 경우 현재 원래 트랜잭션이 완료되기를 기다리는 A의 스레드는 B에서 호출되는 개체에 대해 Binder.onTransact()를 호출합니다. 이렇게 하면 원격 바인더 개체를 호출할 때 재귀 의미 체계가 로컬 개체를 호출할 때와 동일합니다.

원격 개체로 작업할 때 더 이상 유효하지 않은 경우를 확인하는 경우가 많습니다. 이를 확인할 <수 있는 세 가지 방법이 있습니다. ul><li> 프로세스가 #transact transact() 더 이상 존재하지 않는 IBinder에서 호출하려고 하면 메서드가 예외를 throw RemoteException 합니다. <li> 메서드를 #pingBinder() 호출할 수 있으며 원격 프로세스가 더 이상 존재하지 않는 경우 false를 반환합니다. <li> 메서드를 #linkToDeath linkToDeath() 사용하여 IBinder에 등록 DeathRecipient 할 수 있습니다. 이 메서드는 포함 프로세스가 종료될 때 호출됩니다. </ul>

에 대한 android.os.IBinderJava 설명서

이 페이지의 일부는 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

래핑된 인스턴스의 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)

이 바인더 개체에 대한 인터페이스의 로컬 구현을 검색하려고 시도합니다.

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)

인프로시저 및 크로스 프로세스 호출을 수행할 때 고성능을 위해 설계된 경량 원격 프로시저 호출 메커니즘의 핵심 부분인 원격 개체의 기본 인터페이스입니다.

적용 대상