Как проверить, равны ли два прокси-объекта связывателя Android?

У меня есть вопрос относительно связующего устройства Android. Если я правильно понял, Binder можно передавать между процессами. На стороне службы есть объект Binder (, исходный объект ). На стороне клиента (в отдельном процессе )есть объект BinderProxy, который обрабатывает маршаллинг данных AIDL.

Мой вопрос: -как проверить, равны ли два объекта BinderProxy? Под равными я подразумеваю, что они ссылаются на один и тот же объект Binder в процессе обслуживания. Можем ли мы использовать метод equals ()? Объекты BinderProxy имеют тот же адрес памяти, что и исходные объекты Binder?

Спасибо!

Изменить:

В ответ на комментарий Дэвида Вассера:

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

Удаленная служба предлагает AIDL API (, который клиент получает, получая IBinder в onServiceConnected ). AIDL API, среди прочего, содержит два метода--

IBinder getInterface (String interfaceName );

void releaseInterface (IBinder binder );

Идея заключается в том, что клиентские приложения могут запрашивать у удаленного сервиса биндеры для разных интерфейсов. Код dex реализаций интерфейса и их связыватели загружаются в службу динамически и заранее неизвестны. Служба предоставляет эти 2 метода AIDL для клиентских приложений для доступа к этим динамически загружаемым привязкам интерфейсов на основе имени интерфейса.

Итак, скажем, есть App1 и App2. Каждый делает 'binder1 = getInterface ("SomeInterface1" );' и получает привязку для этого динамически загружаемого интерфейса SomeInterface1. После его использования приложения освобождают привязку интерфейса, говоря: «releaseInterface (binder1 );» чтобы служба могла выгрузить код dex интерфейса и выполнить некоторую очистку.

Однако код интерфейса dex не может быть выгружен, если оба App1 и App2 не освободили привязку интерфейса. Итак, в службе я веду счетчик ссылок для каждого динамически загружаемого биндера. (Произнесите ключ карты {Binder} ==> value{счетчик ссылок} ). Когда приложение получает интерфейс (), я увеличиваю счетчик ссылок. Когда это произойдет releaseInterface (binder1 ), я должен уменьшить счетчик ссылок. Но для этого мне нужно проверить, равен ли binder1 ключам связывателя на карте.

Обратите внимание, что связующее было передано из службы (исходного объекта связывателя )в клиентское приложение (, прокси-сервер связывателя, возвращенный getInterface ()), и обратно в службу (в качестве параметра releaseInterface ()-. ] это все-таки прокси или оригинал?? ).

App1 и App2 могут получить разные объекты связывания (и разные реализации интерфейса )для одного и того же имени интерфейса. Вот почему я использую связующее для освобождения.

Надеюсь, это не было слишком запутанным! Спасибо за помощь.

Картик

6
задан Onik 29 March 2018 в 19:59
поделиться