Почему связующие(используемые для IPC), даже если деятельность и услуги находятся в одном и том же процессе

#android #android-service #android-service-binding #android-binder

Вопрос:

Связующие элементы используются для взаимодействия между(а не внутри) процессами/Вызова удаленного метода, поэтому почему/как связь между Деятельностью и Службой возможна через связующие элементы, в которых не задействованы различные процессы.

Когда инициализируется самый первый компонент приложения, запускается запрос к ядру (я думаю, через ActivityManagerService(собственный)-AMS > AMN) (выполняется в system_process) для новой вилки процесса, если соответствующий процесс не существует. Как только процесс создан, любой другой компонент (скажем, Служба) принадлежит тому же процессу, если не указано иное. Теперь эта служба хочет подключиться к Действию того же процесса. Тогда почему IBinder является одним из вариантов?

Разве это не нарушает основополагающий принцип, на основе которого создаются связующие?

Ответ №1:

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

Что касается того, зачем вам использовать его в одном и том же процессе — альтернативой для Android было бы иметь два способа связи со службами: один способ, если они являются одним и тем же процессом, и один способ, если это не так. Это усложнило бы ситуацию для фреймворка с минимальной выгодой. Это значительно усложнило бы работу Служб, в которых клиент может находиться или не находиться в одном и том же процессе (скажем, служба, используемая как клиентским приложением, так и другими приложениями одной и той же компании). Поэтому они просто используют один и тот же метод для обоих.