Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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