AIDL - Какой смысл? - PullRequest
       11

AIDL - Какой смысл?

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

Хорошо, поэтому у меня есть приложение для Android с Activity (UI) и Service (фоновый опрос). Эти два сложно связаны с использованием AIDL (включая обратные вызовы, так что это дуплексная связь, IPC, что угодно).

Каждый раз, когда два разговора я использую это.

Однако я также расширил класс Application - так, чтобы они могли совместно использовать общие объекты данных. Таким образом, Приложение содержит объект User, который Сервис всегда использует, и Activity также может получить к нему доступ, когда работает.

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

Так это выглядит, как

Activity (UI) ---> Application <--- Service

Я могу вызвать события пользовательского интерфейса в Сервисе, выполнив

_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
   uiRef.updateSomeDisplay();
}

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

1 Ответ

0 голосов
/ 03 февраля 2011

Цель AIDL - разрешить межпроцессное взаимодействие. Смысл службы в том, чтобы фоновые операции выполнялись в отдельном процессе от вашего потока пользовательского интерфейса, чтобы они могли продолжать работать, даже если вы закрываете свое приложение. Вам понадобится AIDL, потому что ваша служба будет работать в процессе, совершенно отличном от вашего пользовательского интерфейса, поэтому у вас не будет доступа к памяти в процессе пользовательского интерфейса из процесса службы.

...