Хорошо, поэтому у меня есть приложение для 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, когда я просто слабо ссылаюсь на пользовательский интерфейс, смотрю, существует ли он, и вызываю его методы.