2013-08-09 6 views
4

В моем приложении для Android я реализую соединение SignalR (https://github.com/erizet/SignalA), чтобы подключиться к серверу-концентратору для отправки запросов и получения ответов.Android SignalR должен быть реализован как Service или IntentService?

образец моего кода выглядит следующим образом:

signalAConnection = new com.zsoft.SignalA.Connection(Constants.getHubUrl(), this, new LongPollingTransport()) 
{ 
    @Override 
    public void OnError(Exception exception) 
    { 
    } 

    @Override 
    public void OnMessage(String message) 
    { 
    } 

    @Override 
    public void OnStateChanged(StateBase oldState, StateBase newState) 
    { 
    } 
}; 

if (signalAConnection != null) 
    signalAConnection.Start(); 

Там также представляемому Бит

signalAConnection.Send(hubMessageJson, new SendCallback() 
{ 
    public void OnError(Exception ex) 
    { 
    } 

    public void OnSent(CharSequence message) 
    { 
    } 
}); 

отправка и получение будет происходить через Активность, и некоторые ответы будут отправлены в случайные моменты времени независимо от активности, также следует открывать соединение до тех пор, пока приложение работает (даже если приложение работает в фоновом режиме), поэтому я хочу реализовать соединение signalA в качестве фоновой службы.

Возникает вопрос я должен реализовать как:

1 - Service (http://developer.android.com/reference/android/app/Service.html)

ИЛИ

2 - Намерение службы (http://developer.android.com/training/run-background-service/create-service.html)

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

Я был бы очень признателен, если бы кто-нибудь покажет мне, как реализовать такое подключение в коде как фоновое обслуживание/intenservice.

Спасибо за чтение.

UPDATE:

Пожалуйста, смотрите эту демонстрационную деятельность сделанные разработчиком как, как он реализован SignalA https://github.com/erizet/SignalA/blob/master/Demo/src/com/zsoft/SignalADemo/DemoActivity.java

Проблема заключается в том AQuery (что я ничего не знаю о) используется в этой демонстрационной деятельности , AQuery постоянно работает в фоновом режиме? Проблема заключается в том, что последнее обновление информации о SignalA содержит следующие значения:

Я изменил транспорт. LongPolling теперь использует базовый-http-клиент вместо Aquery для http-общения. Я удалил все зависимости от Aquery.

Поэтому я не уверен, должен ли я следовать этой демонстрационной деятельности или не

Update 2:

Это вещь, которая сбивает с толку меня больше всего в IntentService, то OnHandleIntent вызовы методов stopSelf после того, как закончит свои задачи, когда я на самом деле хочу код в IntentService продолжать работать все время

защищены абстрактные аннулируются onHandleIntent (Intent намерение) Добавлено в API level 3 Этот метод вызывается в рабочем потоке с запросом на обработку. За один раз обрабатывается только один Intent, но обработка происходит в рабочем потоке, который выполняется независимо от другой логики приложения.Таким образом, если этот код занимает много времени, он будет задерживать другие запросы к одному и тому же IntentService, но он ничего не задержит. Когда все запросы обрабатываются, IntentService останавливается, поэтому вы не должны называть stopSelf().

+0

Здравствуйте, ребята, мне очень нужна помощь, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы. –

ответ

2

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

Чтобы ответить на ваш вопрос, вам нужно иметь поток, управляющий сигнальным соединением. Поэтому я считаю, что услуга - лучший выбор, поскольку SignalA должен постоянно работать.

Что касается Aquery и демонстрационного проекта. Я удалил все зависимости к Aquery в библиотеках, а не в демо. Чтобы быть понятным, для запуска SignalA вам не требуется Aquery.

+0

Спасибо за ваш комментарий и за отличную работу, которую вы делаете в создании SignalR на Android, не будет без вас : D У меня есть другие проблемы с SignalA, которые связаны с потерей связи, пересоединением и т. Д., Но я думаю, что я поставил их в другой вопрос. благодаря –

0

В моем случае, я хотел была служба не Намерение службы, так как я хотел что-то, что будет продолжать работать, пока приложение не закроет