Binder
Смотреть что такое «Binder» в других словарях:
binder — bind·er / bīn dər/ n 1: a temporary insurance contract that provides coverage until the policy is issued 2: a receipt for money paid to the owner of real estate or to the owner s agent to secure the right to purchase the real estate upon agreed… … Law dictionary
Binder+Co — AG Rechtsform Aktiengesellschaft ISIN AT000BINDER3 Gründung … Deutsch Wikipedia
binder — BÍNDER s.n. Strat de beton asfaltic folosit ca strat de legătură între fundaţia unui drum şi stratul de uzură, ca fundaţie la trotuarele de asfalt etc. – Din germ. Binder. Trimis de paula, 21.06.2002. Sursa: DEX 98 bínder s. n. Trimis de siveco … Dicționar Român
Binder — steht für: Binder (Baddeckenstedt), ein Ortsteil der Gemeinde Baddeckenstedt im Landkreis Wolfenbüttel, Niedersachsen Binder (Familienname), der Familienname Binder Binder (Tragwerk), horizontales Konstruktionselement im Bauwesen Binder+Co, ein… … Deutsch Wikipedia
Binder — Bind er, n. 1. One who binds; as, a binder of sheaves; one whose trade is to bind; as, a binder of books. [1913 Webster] 2. Anything that binds, as a fillet, cord, rope, or band; a bandage; esp. the principal piece of timber intended to bind… … The Collaborative International Dictionary of English
Binder — Binder, früher verehlichte von der Klogen, geborne Meyer, eine der anmuthigsten Bühnenerscheinungen neuerer Zeit, wurde 1801 zu Schleßwig geboren, wo ihre Mutter (eine ausgezeichnete Schauspielerin) am Hoftheater engagirt war. Ihren ersten… … Damen Conversations Lexikon
Binder — Binder,der:1.〈landwirtschaftl.Maschine〉Bindemäher·Mähbinder–2.⇨Krawatte(1) Binder→Krawatte … Das Wörterbuch der Synonyme
binder — [bīn′dər] n. 1. a person who binds; specif., a bookbinder 2. a thing that binds or holds together; specif., a) a band, cord, etc. b) a material that binds things together [tar is a binder for gravel in paving] c) a detachable cover with rings or… … English World dictionary
Binder [1] — Binder, 1) ein Stein, der mit seiner Länge nach der Tiefe der Mauer gelegt wird. Eine Schicht B. heißt Streckschicht, zum Gegensatz von Laufschicht (deren Steine, Läufer, nach der Länge der Mauer laufen); 2) so v.w. Fußstein; 3) das Paar Sparren … Pierer’s Universal-Lexikon
Binder [2] — Binder, 1) Sebastian, geb. 1800 im Österreichischen, ging zum Theater an der Wien, später an das Kärnthnerthortheater, als erster Tenorist an das Ständetheater zu Prag, u. wieder nach Wien zur großen Oper, verließ später das Theater u. errichtete … Pierer’s Universal-Lexikon
binder
вяжущее
Минеральное или органическое порошкообразное вещество для приготовления бетонов и растворов, способное твердеть при затворении водой
[ Терминологический словарь по строительству на 12 языках (ВНИИИС Госстроя СССР) ]
Тематики
1. Часть вывода электрического изделия, аппарата или устройства
зажим
Одна или несколько частей вывода, необходимые для механического крепления и электрического присоединения одного или нескольких проводников
[ГОСТ Р 50030.1-2000 (МЭК 60947-1-99)]
зажим
Проводящая часть одного полюса, состоящая из одного или более зажимного устройства и изолированная, если необходимо.
[ГОСТ Р 51324.1—2005 (МЭК 60669-1-2000)]
контактный зажим
—
[Интент]
зажим
—
[А.С.Гольдберг. Англо-русский энергетический словарь. 2006 г.]
terminal
conductive part of a device provided for electrical connection to external circuits
[IEC 60947-1, ed. 5.0 (2007-06)]
borne
partie conductrice d’un appareil prévue pour le raccordement électrique à des circuits extérieurs
[IEC 60947-1, ed. 5.0 (2007-06)]
Любое электрическое изделие, аппарат или устройство, будь то резистор, трансформатор, выключатель и т. п., имеет выводы, через которые осуществляется соединение с другими изделиями, аппаратами или устройствами. Соединение может быть неразборным (например, выполненное пайкой), разъемным (например, состоящим из вилки и розетки) и разборным. В последнем случае вывод оснащен зажимом, который служит для механического крепления и электрического присоединения одного или нескольких проводников.
[Интент]
Параллельные тексты EN-RU
There is a wide range of cable terminal solutions for 1,5 – 95mm² cables
[ABB]
2. Отдельное устройство (приспособление) для механического крепления и электрического присоединения проводника или его экранирующей оплетки, например:

Рис. Phoenix Contact

Рис. Phoenix Contact
binder
Полезное
Смотреть что такое «binder» в других словарях:
binder — bind·er / bīn dər/ n 1: a temporary insurance contract that provides coverage until the policy is issued 2: a receipt for money paid to the owner of real estate or to the owner s agent to secure the right to purchase the real estate upon agreed… … Law dictionary
Binder+Co — AG Rechtsform Aktiengesellschaft ISIN AT000BINDER3 Gründung … Deutsch Wikipedia
binder — BÍNDER s.n. Strat de beton asfaltic folosit ca strat de legătură între fundaţia unui drum şi stratul de uzură, ca fundaţie la trotuarele de asfalt etc. – Din germ. Binder. Trimis de paula, 21.06.2002. Sursa: DEX 98 bínder s. n. Trimis de siveco … Dicționar Român
Binder — steht für: Binder (Baddeckenstedt), ein Ortsteil der Gemeinde Baddeckenstedt im Landkreis Wolfenbüttel, Niedersachsen Binder (Familienname), der Familienname Binder Binder (Tragwerk), horizontales Konstruktionselement im Bauwesen Binder+Co, ein… … Deutsch Wikipedia
Binder — Bind er, n. 1. One who binds; as, a binder of sheaves; one whose trade is to bind; as, a binder of books. [1913 Webster] 2. Anything that binds, as a fillet, cord, rope, or band; a bandage; esp. the principal piece of timber intended to bind… … The Collaborative International Dictionary of English
Binder — Binder, früher verehlichte von der Klogen, geborne Meyer, eine der anmuthigsten Bühnenerscheinungen neuerer Zeit, wurde 1801 zu Schleßwig geboren, wo ihre Mutter (eine ausgezeichnete Schauspielerin) am Hoftheater engagirt war. Ihren ersten… … Damen Conversations Lexikon
Binder — Binder,der:1.〈landwirtschaftl.Maschine〉Bindemäher·Mähbinder–2.⇨Krawatte(1) Binder→Krawatte … Das Wörterbuch der Synonyme
binder — [bīn′dər] n. 1. a person who binds; specif., a bookbinder 2. a thing that binds or holds together; specif., a) a band, cord, etc. b) a material that binds things together [tar is a binder for gravel in paving] c) a detachable cover with rings or… … English World dictionary
Binder [1] — Binder, 1) ein Stein, der mit seiner Länge nach der Tiefe der Mauer gelegt wird. Eine Schicht B. heißt Streckschicht, zum Gegensatz von Laufschicht (deren Steine, Läufer, nach der Länge der Mauer laufen); 2) so v.w. Fußstein; 3) das Paar Sparren … Pierer’s Universal-Lexikon
Binder [2] — Binder, 1) Sebastian, geb. 1800 im Österreichischen, ging zum Theater an der Wien, später an das Kärnthnerthortheater, als erster Tenorist an das Ständetheater zu Prag, u. wieder nach Wien zur großen Oper, verließ später das Theater u. errichtete … Pierer’s Universal-Lexikon
binder
1 binder
2 binder
chomp on the binders — включать [приводить в действие] тормоза
3 binder
4 binder
5 binder
cesium binder — фиксатор цезия; вещество для связывания цезия
6 binder
gelled system binder — загущенная система связующего
high-solubility binder — связующий материал высокой растворимости
hydrocarbon polymeric binder — углеводородная полимерная связка
low-density binder — связующее малой плотности
low-modulus binder — связующее с низким модулем упругости
plastic binder — пластмассовое связующее [связка]
plasticized nitrocellulose binder — пластифицированная нитроцеллюлозная связка
plastisol binder — пластизольное связующее [связка]
polymer binder — полимерное связующее [связка]
powder binder — связующий порошок, порошкообразное связующее вещество
propellant binder — связующий компонент [связка] ракетного топлива
sintered crystalline binder — спечённая кристаллическая связка
solid binder — твёрдый связующий [вяжущий] материал; твёрдый носитель катализатора
solid-propellant binder — связующий компонент [связка] твёрдого ракетного топлива
transparent binder — прозрачный связующий материал
viscoelastic binder — вязкоупругий связующий материал
volume concentration binder — объёмное содержание связующего [матрицы]
volume fraction binder — объёмная доля связующего [матрицы]
7 binder
8 binder
9 binder
10 binder
вяжущее
Минеральное или органическое порошкообразное вещество для приготовления бетонов и растворов, способное твердеть при затворении водой
[ Терминологический словарь по строительству на 12 языках (ВНИИИС Госстроя СССР) ]
Тематики
1. Часть вывода электрического изделия, аппарата или устройства
зажим
Одна или несколько частей вывода, необходимые для механического крепления и электрического присоединения одного или нескольких проводников
[ ГОСТ Р 50030. 1-2000 ( МЭК 60947-1-99)]
зажим
Проводящая часть одного полюса, состоящая из одного или более зажимного устройства и изолированная, если необходимо.
[ ГОСТ Р 51324.1—2005 (МЭК 60669-1-2000)]
контактный зажим
—
[Интент]
зажим
—
[А.С.Гольдберг. Англо-русский энергетический словарь. 2006 г.]
terminal
conductive part of a device provided for electrical connection to external circuits
[IEC 60947-1, ed. 5.0 (2007-06)]
borne
partie conductrice d’un appareil prévue pour le raccordement électrique à des circuits extérieurs
[IEC 60947-1, ed. 5.0 (2007-06)]
Любое электрическое изделие, аппарат или устройство, будь то резистор, трансформатор, выключатель и т. п., имеет выводы, через которые осуществляется соединение с другими изделиями, аппаратами или устройствами. Соединение может быть неразборным (например, выполненное пайкой), разъемным (например, состоящим из вилки и розетки) и разборным. В последнем случае вывод оснащен зажимом, который служит для механического крепления и электрического присоединения одного или нескольких проводников.
[Интент]
Параллельные тексты EN-RU
There is a wide range of cable terminal solutions for 1,5 – 95mm² cables
[ABB]
2. Отдельное устройство (приспособление) для механического крепления и электрического присоединения проводника или его экранирующей оплетки, например:

Рис. Phoenix Contact

Рис. Phoenix Contact
Русские Блоги
О Binder, все, что вам нужно знать, как разработчик приложений
В сочетании с собственным пониманием Binder, его можно обобщить как 2,4
Понимание Binder на самом деле заключается в понимании отношений между клиентом, сервером, Binder и ServiceManager
Почему я должен понимать Биндер?
Обычная разработка приложений для Android редко использует межпроцессное взаимодействие (IPC) напрямую, но если вы хотите знать:
Вы должны понимать Binder, будь то четыре основных компонента, или различные системные службы, такие как ActivityManagerService, PackageManagerService, их реализация зависит от механизма связи Binder, показывая важность Binder в системе Android, можно сказать, что Binder является На первом этапе старший инженер.
Механизм Binder очень сложен, и его трудно понять полностью.В дополнение к пониманию различных знаний в операционной системе, вам также необходимо понять реализацию кода уровня драйвера Binder. Недавно я прочитал много статей о Binder, большинство из них слишком абстрактны или слишком глубоко разбираются в деталях исходного кода, и мало действительно простых для понимания статей. Лично считаю, что наиболее ценными являются следующие три статьи: (Другие справочные статьи прилагаются в конце статьи)
Эта статья в основномНа макроуровне, чтобы понять различные концепции и базовый процесс коммуникации в Binder, сосредоточиться только на реализации уровня Java, нижняя реализация не представлена.Разработчикам приложений достаточно понять основные принципы проектирования и процесс взаимодействия с Binder. Чтобы глубоко понять Binder, вам необходимо самостоятельно прочитать исходный код.
Эта статья в основном анализирует три аспекта:
1. Почему Binder?
1.1 Недостатки традиционного механизма МПК
Всем известно, что система Android реализована на основе ядра Linux. Linux предоставляет различные механизмы межпроцессного взаимодействия, такие как: каналы, очереди сообщений, общая память и сокеты. Зачем нам нужно реализовывать набор IPC? Как насчет механизма? Главным образом по двум причинам:
1.1.1 Рабочий угол
Каналы, очереди сообщений и сокеты требуют двух копий памяти для каждого взаимодействия с процессом, что слишком неэффективно, разделяемая память не требует копирования памяти, но управление сложное; Binder требует только одну копию памяти, которая ниже, чем разделяемая память, с точки зрения производительности Кстати, лучше других.
| Механизм МПК | Время копирования данных |
|---|---|
| Общая память | 0 |
| Binder | 1 |
| Конвейер, очередь сообщений, сокет | 2 |
1.1.2 Соображения безопасности
Традиционный механизм IPC не имеет мер безопасности, и получатель не может получить надежный идентификатор процесса или идентификатор пользователя другой стороны, который полностью защищен протоколом верхнего уровня.Например, IP-адрес связи Socket заполняется клиентом, который, вероятно, будет подделан вредоносной программой. Являясь платформой с открытым исходным кодом для конечных пользователей, Android предлагает большое количество приложений на рынке приложений, поэтому безопасность чрезвычайно важна. Система Android назначает идентификатор пользователя (UID) для каждого установленного приложения. UID является важным идентификатором для идентификации идентификатора процесса. Через UID можно выполнить серию проверок прав доступа. С другой стороны, точка доступа традиционного IPC открыта, доступ к любой программе возможен в соответствии с протоколом, и он не может предотвратить доступ вредоносных программ. Android требуется механизм IPC, основанный на архитектуре C / S, и сервер должен иметь возможность Запрос удостоверения личности для обеспечения безопасности данных.
1.2 Некоторые базовые знания Linux
Чтобы узнать, как Binder использует только одну копию памяти для обеспечения межпроцессного взаимодействия, сначала необходимо выяснить, почему традиционный механизм IPC требует двух копий памяти, что требует сначала понимания основ некоторых операционных систем.
1.2.1 Изоляция процесса
Сначала посмотрим на определение Википедии «изоляция процесса»:
Изоляция процессаЭто набор различных аппаратных и программных технологий, предназначенных для защиты процессов в операционной системе от взаимного влияния. Этот метод позволяет избежать ситуации, когда процесс A пишет в процесс B. Изоляция процессов осуществляется с использованием виртуального адресного пространства. Виртуальный адрес процесса A отличается от виртуального адреса процесса B, что не позволяет процессу A записывать информацию данных в процесс B.
Другими словами, данные между процессами не используются совместно, и процесс A не может напрямую обращаться к данным процесса B для обеспечения безопасности данных. В операционной системе с изоляцией процессов взаимодействие между процессами должно проходить через механизм IPC.
Реализация изоляции процесса использует виртуальное адресное пространство. Что такое виртуальное адресное пространство? Сначала вам нужно понятьВиртуальная памятьПо идее, это технология для повышения эффективности программирования и повышения эффективности использования физической памяти. Говоря простым языком, приложение видит непрерывное и полное адресное пространство памяти, и на самом деле эти пространства земного алтаря отображаются в фрагментированную физическую память. Этот процесс отображения прозрачен для приложения. Эта концепция очень важна. Для более глубокого понимания виртуальной памяти вы можете обратиться к этой статье:Понимание виртуальной памяти Linux и физической памяти
1.2.2 Пространство процесса: пространство пользователя / пространство ядра
Все современные операционные системы используют виртуальную память.Для 32-разрядных операционных систем адресное пространство составляет от 2 до 32 или 4G. Ядром операционной системы является ядро. Ядро имеет все права доступа к базовым устройствам, поэтому его необходимо отделить от обычных приложений. Пользовательские процессы не могут напрямую обращаться к процессу ядра. Операционная система логически делит виртуальное адресное пространство на пространство пользователя (пространство пользователя) и пространство ядра (пространство ядра). В 32-битной операционной системе Linux ядро старшего разряда использует 1 Гбайт, называемые пространством ядра, а оставшиеся 3 Гбайт используются пользовательскими процессами, называемыми пользовательским пространством.
1.2.3 Системный вызов: режим пользователя / режим ядра
Поскольку разрешения пользовательского пространства ниже, чем пространства ядра, неизбежно, что пользовательское пространство должно обращаться к ресурсам в пространстве ядра, таким как чтение и запись файлов и доступ к сети, как этого достичь? Единственный путь через операционную системуСистемный вызовИнтерфейс, через интерфейс системного вызова, пользовательская программа может достичь ограниченного доступа к ресурсам ядра под управлением ядра, которые могут не только удовлетворять запросы ресурсов прикладной программы, но также обеспечивать безопасность и стабильность системы.
Когда пользовательский процесс выполняет свой собственный код, процесс в настоящее время находится в состоянии выполнения пользователя (пользовательский режим). В это время процессор выполняет пользовательский код с низкими разрешениями, а когда пользовательский процесс выполняет код ядра посредством системного вызова, процесс временно входит в ядро. В состоянии выполнения (состояние ядра) процессор имеет самые высокие права доступа и может выполнять привилегированные инструкции.
1.2.4 Модуль ядра / драйвер
Как упоминалось ранее, пользовательское пространство может обращаться к пространству ядра через системные вызовы, так как же взаимодействуют пользовательские пространства (межпроцессные процессы)? Традиционный механизм IPC поддерживается ядром, и Binder такой же: в ядре работает драйвер Binder, отвечающий за взаимодействие Binder между процессами.
Драйвер обычно относится к драйверу устройства (Device Driver), который представляет собой специальную программу, которая позволяет компьютеру и устройству обмениваться данными. Эквивалентно аппаратному интерфейсу, операционная система проходит только через этот интерфейс.
Драйвер Binder представляет собой виртуальное символьное устройство, зарегистрированное в / dev / binder, которое определяет набор протоколов связи Binder, отвечает за установление связи Binder между процессами и обеспечивает серию низкоуровневой поддержки для передачи пакетов данных между процессами. Процесс приложения обращается к драйверу Binder через системный вызов.
1.3 Принцип связи традиционного механизма МПК
После понимания вышеуказанных базовых знаний, давайте посмотрим, как реализован традиционный механизм IPC, обычно следующие два шага (за исключением механизма разделяемой памяти):
У этого традиционного механизма IPC есть две проблемы:
2. Основные принципы связующего
2.1 Связующие принципы
Традиционный механизм IPC должен копировать память дважды.Как Binder использует только одну копию памяти для реализации межпроцессного взаимодействия? Как мы узнали ранее, Linux использует адресацию виртуальной памяти. Адрес виртуальной памяти в пространстве пользователя отображается в физической памяти. Чтение и запись в виртуальную память фактически являются чтением и записью в физическую память.Карта памяти, Этот процесс отображения памяти осуществляется через системный вызов mmap ().
Binder использует метод отображения памяти для создания слоя отображения памяти между пространством ядра и буфером данных пользовательского пространства получателя. Таким образом, данные, скопированные из пространства пользователя отправителя в область буфера пространства ядра, эквивалентны непосредственному копированию в область буфера данных пространства пользователя получателя, тем самым уменьшая одну копию данных.
2.2 Связывающая модель связи
Binder основан на архитектуре C / S. Для обеих сторон связи процесс, инициировавший запрос, принадлежит Клиенту, а процесс, получивший запрос, принадлежит Серверу. Из-за изолированности процесса обе стороны не могут взаимодействовать напрямую. Как реализуется Binder?
Анализ принципов связывания для разработчиков приложений для AndroidПример сетевого взаимодействия, приведенный в этой статье, очень уместен. Процесс связи в Binder похож на сетевой запрос. Процесс сетевого взаимодействия можно упростить до четырех ролей: клиент, сервер, DNS-сервер и маршрутизатор. Общий процесс полного сетевого взаимодействия выглядит следующим образом:
Клиент вводит доменное имя сервера
DNS разрешение доменного имени
Соответствующий Сервер не может быть непосредственно найден через доменное имя, и доменное имя Сервера должно быть сначала преобразовано в определенный IP-адрес через DNS-сервер.
Отправить запрос на сервер через роутер
После того, как клиент разрешает IP-адрес сервера через DNS-сервер, он не может напрямую инициировать запрос к серверу, ему необходимо пройти через уровни маршрутизаторов для доступа к серверу.
Сервер возвращает данные
После получения и обработки запроса сервер возвращает данные клиенту через маршрутизатор.
В механизме Binder также определены четыре роли:Клиент, сервер, драйвер Binder и ServiceManager。
Конкретный процесс общения заключается в следующем:
Сервер регистрируется с помощью ServiceManager
Сервер регистрируется в ServiceManager через драйвер Binder и заявляет, что он может предоставлять услуги извне. Таблица отображения будет храниться в ServiceManager: ссылка на Binder, соответствующая серверу с именем zhangsan, равна 0x12345.
Клиент запрашивает ссылку Binder ServiceManager из ServiceManager
Когда Клиент хочет запросить данные с Сервера, ему необходимо запросить ссылку Binder на Сервер из ServiceManager через драйвер Binder: Я хочу связаться с сервером с именем zhangsan, сообщите мне ссылку Binder на Сервер.
Отправить запрос на определенный сервер
После того, как Клиент получит ссылку на Binder, он сможет связаться с Сервером через драйвер Binder.
Сервер возвращает результаты
После того, как Сервер ответит на запрос, ему необходимо снова вернуть результат Клиенту через драйвер Binder.
Android Binder Дизайн и реализация-ДизайнКлиент, сервер, драйвер Binder и ServiceManager описаны более подробно.
2.3 Механизм агента связующего
Благодаря приведенному выше анализу мы уже знаем базовый процесс связи Binder: Клиент получает ссылку на Binder Сервера от SerivceManger, а Клиент инициирует конкретный запрос к Серверу через ссылку Binder. Как клиент вызывает метод Server через эту ссылку Binder?
Например, если сервер предоставляет метод добавления, процесс, который клиент фактически запрашивает для добавления, выглядит следующим образом: клиент сначала получает ссылку Binder на сервер из ServiceManager через драйвер Binder. Эта ссылка является объектом Java. Этот объект имеет метод добавления; Cient получает объект Вы можете напрямую запросить метод добавления.
Фактически, Объект, полученный Клиентом, не является реальной сущностью Binder Сервера, и драйвер Binder создает слойПреобразование объекта, Этот объект упакован в прокси-объект ProxyObject. Этот ProxyObject и реальная сущность Binder имеют одинаковую сигнатуру метода. Когда клиент запрашивает метод add через этот ProxyObject, драйвер Binder автоматически перенаправляет запрос на указанную сущность Binder для выполнения. ЗдесьМеханизм агента Биндера, Поскольку ProxyObject и реальный объект Binder имеют одинаковую сигнатуру метода, Клиенту не нужно заботиться о том, является ли он ProxyObject или реальным объектом.
Для удобства описания реальная сущность Binder сервера называетсяСвязующий локальный объект; Ссылка Binder в клиенте, то есть ProxyObject, вызовите егоСвязующий прокси-объект。
2.4 Переосмысление концепции Binder
После вышеприведенного анализа мы грубо прояснили основной принцип связи механизма Binder, а теперь вернемся к реорганизации понимания механизма Binder:
Для клиента
Для сервера
Для драйвера Binder
Это мост, соединяющий Клиент с Сервером, который отвечает за преобразование прокси-объектов в локальные объекты и возвращает результат выполнения Сервер-Клиенту.
Для ServiceManager
Он сохраняет сопоставление имени символа «Связыватель сервера» и ссылки «Связыватель», и Клиент находит через него ссылку на Связыватель сервера.
Конкретная структура прокси-объекта Binder и локального объекта Binder сохраняется в драйвере Binder.Так как мы заботимся только о базовом коммуникационном механизме Binder, базовая реализация не представляет слишком много. Студенты, которые хотят знать больше, могут обратиться кAndroid Binder Дизайн и реализация-Дизайн。
3. Понять Binder через код
Приведенное выше введение является относительно абстрактным, и теперь мы понимаем Биндер на конкретных примерах.
3.1 Через примеры AIDL, чтобы понять использование Binder
3.1.1 Несколько видов обязанностей, связанных с Binder
Перед конкретным анализом нам нужно понять обязанности нескольких классов, связанных с Binder:
IBinder
Базовый интерфейс для межпроцессного взаимодействия объявляет серию абстрактных методов, которые должны быть реализованы для межпроцессного взаимодействия. Реализация этого интерфейса означает, что межпроцессное взаимодействие может быть выполнено. И клиент, и сервер должны реализовать этот интерфейс.
IInterface
Это также Базовый интерфейс, который используется для указания того, какие возможности предоставляет Сервер, и протокол связи между Клиентом и Сервером.
Binder
Базовый класс для локальных объектов, которые предоставляют услуги Binder. Он реализует интерфейс IBinder, и все локальные объекты должны наследовать этот класс.
BinderProxy
Класс BinderProxy также определен в файле Binder.java.Этот класс указывает, что прокси-объект Binder также реализует интерфейс IBinder, но многие из его реализаций обрабатываются собственным уровнем. На самом деле клиент получает этот прокси-объект.
Stub
Этот класс автоматически генерируется после компиляции файла aidl и наследуется от Binder, что указывает на то, что это локальный объект Binder, это абстрактный класс, который реализует интерфейс IInterface, указывая на то, что его подклассы должны реализовывать определенные возможности, которые будет предоставлять Server (т. Е. Aidl Метод объявлен в файле).
Proxy
Он реализует интерфейс IInterface, указывая на то, что он является частью процесса связи Binder, он реализует метод, объявленный в aidl, но в конечном итоге он остается на усмотрение члена mRemote, что указывает на то, что он является прокси-объектом, а член mRemote фактически является BinderProxy.
3.1.2 Примеры AIDL
Сначала определите файл aidl, метод getPid объявлен в этом интерфейсе:
Ниже приведен класс Java, сгенерированный после компиляции IRemoteService.aild:
В этом файле 3 класса:
IRemoteService
Унаследованный от интерфейса IInterface, объявлен метод getPid, объявленный в IRemoteService.aidl, который является интерфейсом для взаимодействия Клиента и Сервиса.
IRemoteService.Stub
Статический абстрактный внутренний класс IRemoteService, унаследованный от Binder, и его подклассы должны реализовывать интерфейс IRemoteService, указывающий, что это локальный объект Binder Сервера и должен реализовывать интерфейс getPid.
IRemoteService.Stub.Proxy
Статический внутренний класс IRemoteService.Stub, который не наследуется от Binder, но содержит объект IBinder. Этот объект на самом деле является BinderProxy, что указывает на то, что это локальный прокси-объект сервера в клиенте. Прокси-сервер реализует интерфейс getPid и сериализует параметры для обработки mRemote (BinderProxy), фактически он передается драйверу Binder для завершения связи с удаленной заглушкой.
Сначала рассмотрим метод asInterface в заглушке. Этот метод обычно вызывается клиентом после успешного bindService. Роль заключается в преобразовании объекта IBinder, возвращенного после успешного связывания, в определенный интерфейс IInterface. После того, как клиент получит этот интерфейс IInterface Вы можете свободно вызывать методы, предоставляемые сервером.
Метод asInterface может вернуть объект IRemoteService самой заглушки или создать объект Proxy. Почему? Хотя Binder является механизмом межпроцессного взаимодействия, он также может обслуживать этот процесс, то есть клиент и сервер могут находиться в одном и том же процессе, нет необходимости передавать через драйвер Binder в одном и том же процессе, прямого доступа достаточно; Клиент и Сервер должны передаваться через прокси-объекты Binder в разных процессах. Другими словами:
Как obj.queryLocalInterface обнаруживает, существует ли локальный IInterface, как вы можете видеть из кода Binder, это всего лишь простое сравнение того, соответствует ли дескриптор Binder найденному дескриптору. Если он совпадает, он возвращает mOwner напрямую. Вызовите параметр attach метода attachInterface в конструкторе. Метод queryLocalInterface BinderProxy напрямую возвращает ноль.
Существует два сценария вызова метода Server через Binder в клиенте:
Клиент и Сервер находятся в одном процессе
Метод Stub.asInterface возвращает объект Stub, который является локальным объектом Binder. Другими словами, он не имеет никакого отношения к межпроцессному взаимодействию Binder, просто вызывает его напрямую. В настоящее время клиентский клиент и ответчик сервера находятся в одном потоке.
Клиент и Сервер находятся в разных процессах
Метод Stub.asInterface возвращает прокси-объект Binder, и ему необходимо завершить межпроцессное взаимодействие через драйвер Binder. В этом случае поток вызывающих клиентов будет приостановлен (Binder также предоставляет асинхронный метод, не обсуждаемый здесь), ожидая ответа от сервера и возврата данных. Здесь следует отметить, что ответ Сервера обрабатывается в пуле потоков Binder процесса Сервера, а не в основном потоке.
Затем проанализируйте сценарий кросс-процесса,Конкретный процесс вызова метода getPid клиентом:
Клиент вызывает объект Binder proxy, клиентский поток зависает
Ссылка IRemoteService, полученная в клиенте, на самом деле является прокси-сервером. Вызов метода getPid фактически вызывает метод getPid прокси-сервера. Этот метод просто вызывает транзакционный метод члена mRemote после сериализации параметров. Класс Stub определяет номер метода для каждого метода в IRemoteService, а номер метода getPid передается в транзакционный метод.В это время поток вызывающего клиента зависает, ожидая, пока сервер ответит на данные.
Прокси-объект Binder отправляет запрос драйверу Binder
Член mRemote в Proxy на самом деле является BinderProxy, и транзакционный метод в BinderProxy наконец вызывается для метода transactNative, что означает, что запрос клиента отправляется драйверу Binder для обработки.
Драйвер Binder отправляет запрос на сервер
После серии обработок драйвер Binder отправляет запрос на сервер, то есть вызывает метод onTransact локального объекта Binder сервера (заглушки) и, наконец, завершает конкретный вызов метода getPid в этом методе. В методе onTransact выделите конкретный метод для обработки в соответствии с номером метода, переданным при вызове транзакции в Proxy.
Разбудить клиентский поток и вернуть результат
После завершения процесса onTransact запишите результат в ответ и верните его в драйвер Binder, который пробуждает приостановленный клиентский поток и возвращает результат. На этом этапе межпроцессное взаимодействие завершено.
3.2 Ручное кодирование для реализации ActivityManagerService
Из предыдущего примера мы уже знаем, что файл aidl используется только для определения интерфейса для взаимодействия C / S. Android автоматически генерирует соответствующий класс Java во время компиляции. Созданный класс содержит статические внутренние классы Stub и Proxy для инкапсуляции данных. Фактический процесс преобразования должен касаться только определенного класса интерфейса Java. Почему Stub и Proxy статические внутренние классы? Это на самом деле просто поместить три класса в файл для улучшения агрегации кода. Посредством вышеприведенного анализа мы можем на самом деле добиться связи Binder без использования помощи и ручного кодирования. Ниже мы реализуем ActivityManagerService посредством кодирования.
Сначала определите интерфейс IActivityManager:
Во-вторых, реализуйте базовый класс локального объекта Binder на стороне ActivityManagerService:
Снова реализуйте объект прокси на стороне клиента:
Наконец, реализуем локальный объект Binder (интерфейс IActivityManager):
Здесь была реализована упрощенная версия ActivityManagerService, а остальное заключается в том, что Клиенту необходимо получить прокси-объект AMS IActivityManager для связи. В реальном процессе разработки промежуточный код может быть автоматически скомпилирован через файл aidl, который не требует от нас его реализации вручную, но ручное кодирование может углубить понимание механизма Binder. В процессе разработки мы не будем напрямую использовать AMS, но понимание принципа реализации AMS необходимо для знакомства с платформой, а в отношении конкретного принципа реализации AMS я проанализирую его в последующих статьях.
На этом этапе был введен базовый процесс связи механизма Binder. Поскольку механизм Binder слишком сложен, а мой уровень ограничен, в тексте неизбежны ошибки или недостатки. Добро пожаловать, чтобы исправить меня.










