Общение с активностью из службы (LocalService) – лучшие рекомендации для Android

Общий сценарий – активность с фоновым сервисом для сервера опроса.

Служба будет периодически запускаться через AlarmManager, а также выполнять задачи для Activity (пользователь нажимает кнопку, выбирает что-то с сервера).

Здесь я бы хотел узнать лучшие практики. Я думаю, что лучшим дизайном будет пример Android LocalService: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

Однако в этом примере Activity имеет ссылку на активность mBoundService но нет обратного соединения ( услуга не имеет способа вызвать Activity ).

Каков наилучший способ для Сервиса вызвать Activity?

Я использую Intents, BroadcastReceivers, Messages? Как?

Solutions Collecting From Web of "Общение с активностью из службы (LocalService) – лучшие рекомендации для Android"

Я думаю, что лучшим дизайном будет пример Android LocalService: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

Я бы не стал. Используйте самую свободную муфту, которую вы можете стоять. Следовательно, в среднем, для шаблона команды с startService() вместо шаблона привязки с bindService() . Примечательно, что привязка – это немного боль, когда дело касается изменений конфигурации (например, вращения экрана).

Каков наилучший способ для Сервиса вызвать Activity? Я использую Intents, BroadcastReceivers, Messages? Как?

См. « Уведомлять активность из службы».

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

Если Служба инициирует (из-за сообщения «Тревога», в котором есть какая-то новая информация для обмена), он обычно отправляет широковещательную передачу.

Если действие инициируется (из-за того, что ваш пример «перейдите что-нибудь с сервера»), он может обрабатываться асинхронно с использованием AsyncTask или аналогичного. То есть вы можете получить с сервера в AsyncTask.doInBackground () и отправить результаты обратно в активность в AsyncTask.onPostExecute. Этот сценарий будет несколько более сложным, если ожидается, что запрошенная операция займет очень много времени – и в этом случае я бы отключил ее и отправил обратно службу из службы.