Методы удаленного доступа к Android (AIDL) против Intents - производительность и использование батареи - PullRequest
5 голосов
/ 16 февраля 2011

Моя команда работает над проектом Android, который состоит из нескольких приложений Android, которые обмениваются данными (на одном телефоне).Идея состоит в том, чтобы иметь несколько приложений, которые собирают некоторые данные и отправляют эти данные в основное приложение.Основной задачей здесь является сделать обмен как можно более дешевым с точки зрения нагрузки на процессор и использования батареи.

Насколько мне известно, существует два способа достижения межпроцессного взаимодействия:

  1. Смыслы и действия - одно действие улавливает намерения другого
  2. Удаленные методы (через AIDL)

Интересно, какое из них более эффективно в следующих сценариях:

  1. Очень частые вызовы сообщений / методов с очень небольшим количеством отправленных данных / трафиком (например, просто передача нескольких примитивов)
  2. Менее частые вызовы сообщений / методов с большими кусками трафика (например, сбор данныхи периодически отправлять несколько КБ / МБ данных)
  3. Очень частые сообщения / вызовы методов с большими кусками данных, которыми обмениваются

Я был бы признателен за любую помощь, либо с точки зрения сравнения илиссылка / ссылка на эталонный тест.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Я думаю, что для 1) вам лучше всего использовать удаленный сервис, а для 2) и 3) вам лучше записывать в файлы или базу данных.Интенты предназначены для нечастого межпроцессного взаимодействия и запуска приложений и сервисов.

1 голос
/ 12 августа 2013

Я предлагаю вам использовать механизм доменных сокетов Unix для решения сценария 3). Высокая частота усложнит использование файлов / баз данных, и согласно этому ответу использование IPC Android не рекомендуется с точки зрения производительности, поскольку каждый объект должен быть преобразован в посылку (и обратно) требуется время .. Вы также можете использовать каналы Unix, но у него есть некоторые ограничения:

1 голос
/ 16 февраля 2011

Вы также можете попробовать использовать собственный код для создания общей памяти в качестве альтернативы. Проверьте эту ссылку для деталей: http://www.androidenea.com/2010/03/share-memory-using-ashmem-and-binder-in.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...