2014-02-05 3 views
0

Основываясь на этом сообщении из документов AIDL, для AIDL существует только одна действительная учетная запись.Почему AIDL необходим для поддержки многопоточности?

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

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

Документов дальнейшего состояние:

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

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

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

ответ

2

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

+0

Итак, у вас есть много возможностей для того, чтобы у многих клиентов услуги были экземпляры мессенджеров и отправлены сообщения службе, но эти сообщения не будут обрабатываться одновременно? – diedthreetimes

+0

Нет, это не нормально, так как это может быть не потокобезопасно в зависимости от того, как вы его реализовали. Я имею в виду, что если вы используете «Messenger», вы должны заботиться о потенциальной безопасности потоков. – m0skit0

+0

Хммм, здесь, хотя безопасность потоков произошла после обработки сообщений. Из [docs] (http://developer.android.com/guide/components/bound-services.html#Messenger) кажется, что многие потоки отправляют сообщения через мессенджер в порядке. (См. Примечание слева). Самое большое различие заключается в том, что AIDL автоматически создаст пул потоков для вас. Уровень управления параллелизмом почти одинаковый. – diedthreetimes

0

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