2

Я опытный веб-разработчик, но я очень новичок в Android SDK и Java. У меня есть концепт вопрос о фоновых операциях и многопоточности в приложении для Android.Отдельная служба потока темы связи с активностью в приложении для Android

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

Таким образом, идея заключается в следующем:

  1. Когда WIFI подключается услуга должна начинаться, когда WIFI отключается, служба должна остановиться. Другими словами, он должен работать только при активном беспроводном соединении. Я думаю, мне нужно будет каким-то образом реализовать обработчик событий.

  2. Служба должна работать в отдельной ветке, чтобы не блокировать нить пользовательского интерфейса.

  3. Деятельность должна быть в состоянии подключиться к службе и получать статус от нее динамически.

Конечно, я не ищу полного решения, просто для некоторых советов от опытных профессионалов о том, какие компоненты API следует использовать.

В частности, меня интересует безопасный способ запуска службы в отдельном потоке и в то же время взаимодействовать с этим действием. Любые предложения будут высоко оценены.

+0

google for android bound services – pskink

ответ

4

Чтобы ответить на ваш вопрос поточечен:

1. Создание пользовательского BroadcastReceiver, который перехватывает WIFI_STATE_CHANGED вещания. Запустите HTTP-запросы в своем методе onReceive() в отдельном Service, когда доступно подключение.

2. Для выполнения HTTP-запросов, вы можете использовать либо IntentServiceИЛИService с AsyncTask с.

3. Использовать boundService. Это на самом деле не решение для подобных проблем, но его хорошая отправная точка и может быть уточнена позже.

+0

Ответ отлично, но я бы посоветовал использовать связанный сервис, если служба должна выполняться во время действия. В противном случае вы получите службу, привязанную _and_, с помощью 'startService'. Был там, сделал это. Я сожалею об этом сейчас. Если вы не сообщаете _a много_ данных между 'Activity' и' Service', просто используйте 'startService()' и широковещательный приемник. –

+0

Спасибо за ваши предложения. Я думаю, что я только начну разработку прототипа, основываясь на ваших рекомендациях. Однако не могли бы вы объяснить, почему связанный сервис не лучший кандидат на работу? В чем проблема с таким подходом? –

+0

@ci_ на самом деле неправильно с привязанным местным сервисом? это намного лучше, чем запуск службы и передача данных через дополнительные услуги, приемники вещания и т. д. ... – pskink