Почему AIDL необходим для поддержки многопоточности?

Судя по этому сообщению из документации AIDL, существует только один допустимый вариант использования AIDL.

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

Что именно означает «обработка многопоточности» в этом контексте? Это больше, чем просто наличие службы с несколькими запущенными потоками?

В документах далее говорится:

если вы хотите выполнять IPC, но вам не нужно обрабатывать многопоточность, реализуйте свой интерфейс с помощью Messenger.

Почему Мессенджер неприемлем для сервиса, поддерживающего многопоточность? Нельзя было организовать связь между потоками внутри мессенджера (без использования разделяемой памяти)?

Проблема в том, что этот код будет значительно сложнее, чем использование обработчика?


person diedthreetimes    schedule 05.02.2014    source источник


Ответы (2)


Это просто означает, что вызовы AIDL могут быть параллельными (например, несколько приложений, вызывающих один и тот же интерфейс AIDL в одной и той же службе), потому что Android обрабатывает это за вас, но с Messenger это не так (но вы можете сделать это вручную).

person m0skit0    schedule 05.02.2014
comment
То есть нормально, когда многие клиенты службы создают экземпляры мессенджеров и отправляют сообщения в службу, но эти сообщения не будут обрабатываться одновременно? - person diedthreetimes; 06.02.2014
comment
Нет, это не нормально, так как это может быть не потокобезопасным в зависимости от того, как вы его реализовали. Я имею в виду, что если вы используете Messenger, вы должны позаботиться о потенциальной безопасности потоков. - person m0skit0; 06.02.2014
comment
Хммм, хотя здесь безопасность потока будет происходить после обработки сообщений. Из документов кажется, что многие потоки отправляют сообщения через мессенджер в порядке. (См. примечание слева). Самая большая разница заключается в том, что AIDL автоматически создаст для вас пул потоков. Уровень управления параллелизмом почти такой же. - person diedthreetimes; 06.02.2014
comment
Да, правильно, вам нужно создавать темы самостоятельно. На самом деле я реализовал свой сервис с поддержкой многопоточности, используя Messenger, а не AIDL. - person m0skit0; 07.02.2014

Согласно http://developer.android.com/guide/components/bound-services.html. Messnger использует один поток для очереди сообщений. Следовательно, нет необходимости решать какие-либо проблемы с синхронизацией. В случае AIDL это ответственность разработчика.

person shyguy    schedule 15.04.2015