Какие механизмы IPC доступны в ОС Android?

Кто-нибудь, пожалуйста, скажите мне, каковы все механизмы IPC, которые присутствуют в Android.

Насколько мне известно, это:

  1. Намерения
  2. Связующие

person Suman    schedule 21.04.2011    source источник


Ответы (6)


IPC — это межпроцессное взаимодействие. В нем описываются механизмы, используемые различными типами компонентов Android для связи друг с другом.

1) Intents — это сообщения, которые компоненты могут отправлять и получать. Это универсальный механизм передачи данных между процессами. С помощью намерений можно запускать службы или действия, вызывать широковещательные приемники и так далее.

2) Bundles — это объекты данных, которые передаются. Это похоже на сериализацию объекта, но намного быстрее на Android. Пакет можно прочитать из намерения с помощью метода getExtras().

3) Binders — это сущности, которые позволяют действиям и службам получать ссылку в другую службу. Он позволяет не просто отправлять сообщения сервисам, а напрямую вызывать у них методы.

person Vladimir Ivanov    schedule 21.04.2011
comment
и это universal mechanism реализовано средствами ...чего? (ожидая чего-то среди строк системных вызовов ядра, расширений для java, найденных в dalvik и т. д.) - person n611x007; 24.04.2015
comment
Bundle можно рассматривать как поставляемый с Intent, и не забывайте о BroadcastReceiver. Вот слова с официальной страницы Android: Мы настоятельно рекомендуем вам вместо этого использовать системные функции Android для IPC, такие как Intent, Binder или Messenger со службой и BroadcastReceiver. developer.android.com/training/articles/security-tips.html# ИПК - person Sam003; 10.07.2015
comment
Может кто-нибудь добавить примеры? Новички поймут это быстрее, если будут варианты использования для каждого типа IPC. - person guettli; 14.09.2015
comment
different types of android components или разные типы процессов Android? - person Yousha Aleayoub; 10.09.2016
comment
Разве связующее на самом деле не основывает все упомянутые механизмы на Android? Мы знаем, что Android Binder Framework предоставляет возможности ядра для IPC. - person ctk2021; 04.02.2021

В Android существует три типа механизма IPC:

  1. Намерения (вместе с пакетами)
  2. Связующие
  3. ASHMEM (анонимная общая память). Основное различие между общей памятью Linux и этой общей памятью заключается в том, что в Linux другие процессы не могут освободить общую память, но здесь, если другим процессам требуется память, эта память может быть освобождена ОС Android.
person Suman    schedule 09.05.2011
comment
Разве AIDL не входит в это ?? - person Raa; 18.06.2013
comment
Связующие включают AIDL. Это всего лишь язык, который поможет вам создать интерфейс Binder для IPC. - person sweisgerber.dev; 22.07.2013
comment
Используйте ASHMEM только в том случае, если вы знаете, что делаете. Совместимость между различными версиями Android не гарантируется. - person David Burström; 05.12.2013
comment
Должны быть добавлены сокеты и каналы UNIX - person aberaud; 13.04.2015
comment
А как насчет контент-провайдеров и трансляций? - person Mit_; 16.04.2019

Все ответы хороши и лаконичны в этом посте. Но я хотел бы осветить, какой механизм IPC нам следует использовать. Прежде всего, IPC означает Inter Process communication, где два приложения или процесса будут взаимодействовать друг с другом, передавая между собой некоторые данные. Поскольку Android предназначен для встроенных и небольших устройств, мы не должны использовать serialization для IPC, вместо этого мы можем использовать BINDERs, который внутри использует parcels. Parcel — это своего рода облегченная сериализация с использованием концепции общей памяти.

Существует много различий между Binder IPC и Serialization IPC:

1. Сериализацию очень сложно использовать во встроенных устройствах, связь будет очень медленной.

2. Binders использует Parcels для очень быстрого IPC.< br>
3. Binders внутренне использует концепцию общей памяти, которая использует меньше памяти при совместном использовании данных между двумя процессами.

Итог: Binders использует меньше памяти и довольно быстро, поскольку использует посылки. Serialization очень тяжелый, требует времени для отправки и получения данных, а также занимает больше памяти по сравнению с биндерами.

Примечание. Для передачи данных между действиями, службами и получателями используйте только пакеты. Не используйте ни сериализацию, ни связыватели. Связыватели специально используются только для служб связывателей, где будут взаимодействовать 2 процесса.

Надеюсь, это поможет :)

person Setu Kumar Basak    schedule 17.02.2016

Как указано на странице разработчиков Android, механизмы IPC в Android включают:

  • Намерения (включая пакеты)
  • Связующие или мессенджеры с сервисом
  • Широковещательные приемники
person lomza    schedule 07.02.2014
comment
Все они основаны на связующем IPC. - person Xiao-Feng Li; 07.05.2019

Существует три типа механизмов IPC:

  1. обработчик
  2. реализующий связующее
  3. АЙДЛ
person swap    schedule 17.09.2012
comment
обработчик нет. Мессенджер есть. - person John; 22.02.2019

Другим решением, которое сработало для меня, было использование внутренних файлов:

https://developer.android.com/training/data-storage#filesInternal

Запись из одного процесса, закрытие файла, чтение из другого.

person Raul Lucaciu    schedule 29.01.2021