Удаленный процесс Android: messenger против aidl? Что лучше?

#android #android-service

#Android #android-сервис

Вопрос:

В настоящее время у меня есть удаленная служба, которая постоянно взаимодействует с активностью в том же приложении.

Мне нужно время от времени отправлять и отправлять сообщения. Какой способ обмена сообщениями лучше, быстрее и экономичнее для батареи? Использование сообщений или интерфейса aidl?

На данный момент я использую интерфейс aidl, но по какой-то причине я думаю, что при подключении слушателей возникает много накладных расходов…

Любая обратная связь с благодарностью.

Комментарии:

1. Почему ваш сервис должен быть в удаленном процессе? Кроме того, почему он должен выполняться непрерывно?

2. Ну, мое приложение — это мультимедийное аудиоприложение, которое должно работать в фоновом режиме, что требует много ресурсов: памяти. Наличие этого в том же процессе, что и мои действия, скорее всего, приведет к проблемам с достижением предела использования ресурсов для каждого процесса. Кроме того, преимущества заключаются в том, что если ваш пользовательский интерфейс по какой-либо причине выходит из строя, ваш сервис этого не делает…

Ответ №1:

В настоящее время у меня есть удаленная служба, которая постоянно взаимодействует с активностью в том же приложении.

Удаленные службы, как правило, не очень хорошая идея.

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

Тогда используйте меньше памяти. Аудиоплееру не нужно превышать лимиты оперативной памяти для каждого процесса, даже при выполнении действий.

Кроме того, преимущества заключаются в том, что если ваш пользовательский интерфейс по какой-либо причине выходит из строя, ваш сервис этого не делает.

Это не особенно веская причина для траты оперативной памяти устройства и процессорного времени. Это прекрасный подход для сервера, в меньшей степени для встроенной системы.

Какой способ обмена сообщениями лучше, быстрее и экономичнее для батареи? Использование сообщений или интерфейса aidl?

Они должны быть достаточно сопоставимы. Соображения IPC должны затмить большинство других эффектов. Например, цитирую себя из одной из моих книг:

Например, в каталоге CPU-Java / AIDLOverhead исходного кода книги вы найдете пару проектов, реализующих один и тот же метод бездействия в эквивалентных сервисах. Один использует AIDL и связан с удаленно из отдельного клиентского приложения; другой — локальная служба в самом клиентском приложении. Затем клиент вызывает метод бездействия 1 миллион раз для каждой из двух служб. В среднем на Samsung Galaxy Tab 10.1 1 миллион вызовов занимает около 170 секунд для удаленной службы, в то время как для локальной службы требуется около 170 миллисекунд. Следовательно, накладные расходы на отдельный удаленный вызов метода невелики (~ 170 микросекунд), но выполнение многих из них в цикле или при запуске пользователем ListView может стать заметным.

При этом, если вы обеспокоены накладными расходами (но настаиваете на удаленной службе), вам, вероятно, лучше попробовать оба варианта и использовать ведение журнала, чтобы определить, есть ли явный победитель.

Комментарии:

1. Спасибо за ответ. Использование памяти было сильно оптимизировано, но все же мне нужно использовать количество, чем на некоторых старых телефонах, это невозможно. Причина в том, что происходит большая обработка данных. Что-то, о чем я не упомянул, так это то, что запуск службы и действия в одном и том же процессе делает пользовательский интерфейс вялым, и я заметил, что с удаленной службой все работает намного плавнее. Что касается вашей последней цитаты, спасибо за информацию, я проведу несколько тестовых примеров, чтобы определить, что лучше.

2. цитата: «Удаленные службы, как правило, не очень хорошая идея». если это не очень хорошая идея, должен ли он вместо этого использовать только локальную службу?