Итак, у меня есть приложение для Android с Управлением (UI) и службой (фоновый опрос). Эти два связаны друг с другом с помощью AIDL (включая обратные вызовы, так что это дуплексная связь, IPC, что угодно).AIDL - В чем смысл?
Каждый раз, когда я разговариваю, я использую это.
Однако я также расширил класс Application, так что они могут совместно использовать общие объекты данных. Таким образом, приложение содержит объект User, который всегда используется Сервисом, и активность также может обращаться к нему при его запуске.
Приложение также имеет WeakReference для Activity (во избежание утечки контекста), поскольку пользователь иногда запускает обновления пользовательского интерфейса.
Так выглядит
Activity (UI) ---> Application <--- Service
Я могу вызвать события пользовательского интерфейса в рамках услуг, делая
_app = (FooApplication)this.getApplication();
FooActivity uiRef = _app.getUIReference().get();
if (uiRef != null) {
uiRef.updateSomeDisplay();
}
Так что я не понимаю. Зачем беспокоиться о сложных вызовах AIDL, когда я просто слабо ссылаюсь на пользовательский интерфейс, смотрю, существует ли он и вызывает его методы.
Я вижу. Я как бы собирал эту же мысль вместе и вернулся, чтобы отредактировать себя. Если у меня есть отдельный процесс - будет ли автономный процесс обслуживания не появляться в Advanced Task Killer? Это ограничивается листингом? – paulpooch
Я работаю с фоновыми службами в нескольких приложениях за последний год на всех устройствах с Android 2.1 до 4.1.2 и ни разу не видел службу, запущенную в отдельном процессе, из пользовательского интерфейса, определенного в том же самом. файл apk. В документации говорится: «Если запускается компонент приложения и уже существует процесс для этого приложения (поскольку существует другой компонент из приложения), тогда компонент запускается в этом процессе и использует тот же поток выполнения». Да, ты * можешь * сказать это не делать этого, но я не вижу причин, почему ты ...? – Jules
Одним из примеров того, почему вы хотите сделать это, является фоновое аудио обслуживание. Если вы запустите проигрыватель в отдельном процессе, ваше приложение для медиаплеера может быть более эффективным с точки зрения памяти, потому что весь стек пользовательского интерфейса не должен оставаться в памяти во время воспроизведения вашего аудио. Однако это значительно усложняет использование AIDL, поэтому в большинстве случаев это не стоит. –