Использование сервиса для длительного сетевого подключения

Прямо сейчас у меня есть сервер, работающий на рабочем столе. Я хочу иметь возможность запускать свое приложение, нажимать кнопку, чтобы начать сбор данных с этого сервера, и останавливаться только после того, как я снова нажму кнопку. Пользователь всегда должен получать данные с этого сервера после нажатия кнопки, даже если приложение неактивно. До сих пор я рассматривал возможность настройки службы или использования потоков самостоятельно.

Служба звучит именно так, как мне нужно, но мне сказали, что она не предназначена для поддержания длительного сетевого подключения. Я просмотрел пример приложения BluetoothChat, и он не использовал службу. Будет ли в этом случае правильным использование службы, или мне следует реализовать ее с помощью потоков, как это делает пример приложения? Единственная причина, по которой мне нужно длинное соединение, — это прослушивание отчетов об ошибках с сервера. Другие сетевые вещи происходят только тогда, когда пользователь напрямую использует приложение. В любом случае мне придется использовать потоки, потому что служба работает в том же потоке, что и действие, которое ее вызывает, но я думаю, что мой главный вопрос заключается в том, следует ли мне отказаться от части службы. Прямо сейчас у меня есть базовая служба, которая может обрабатывать отправленные ей сообщения, и она кажется очень простой в использовании. Документация по нему просто повсюду, должен быть раздел, говорящий: «Если вы хотите сделать X, то это предлагается!»


person trevor-e    schedule 08.06.2012    source источник


Ответы (1)


Служба работает в потоке пользовательского интерфейса, но IntentService работает в своем собственном потоке.

Неоднозначно говорить, что «приложение» не активно. Если вы используете службу, она всегда активна. IntentService активен, пока он завершил работу в своем методе onHandleIntent(). Ни одно из действий приложения не может быть активным, что означает, что приложение находится в фоновом режиме.

Кроме этого, мне нужно больше знать о том, что вы пытаетесь сделать. В общем, лучше собирать данные циклами, чем постоянно держать соединение открытым. Например, что вы делаете, когда устройство теряет соединение с Интернетом?

person Joe Malin    schedule 09.06.2012
comment
Я буду передавать данные, которые будут собраны на компьютере. Когда устройство теряет соединение с Интернетом, потоковая передача на мгновение останавливается до тех пор, пока соединение не восстановится. Я посмотрю на IntentService, чтобы убедиться, что это то, что мне нужно. - person trevor-e; 11.06.2012