Android SignalR应该实现为Service还是IntentService?

时间:2013-08-09 01:10:30

标签: java android signalr intentservice signalr.client

在我的Android App上,我正在实施SignalR连接(https://github.com/erizet/SignalA)以连接到Hub服务器以发送请求和接收响应。

我的代码示例如下:

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 - 服务(http://developer.android.com/reference/android/app/Service.html

OR

2 - 意图服务(http://developer.android.com/training/run-background-service/create-service.html

请记住,我需要向服务发送字符串并从服务中获取响应字符串。

如果有人能告诉我如何在代码中将这种连接实现为后台服务/ intentservice,我将不胜感激。

感谢阅读。

更新

请参阅开发人员所做的演示活动,了解他如何实施SignalA https://github.com/erizet/SignalA/blob/master/Demo/src/com/zsoft/SignalADemo/DemoActivity.java

问题是AQuery(我一无所知)正在这个演示活动中使用。 AQuery是否一直在后台运行? 问题是,SignalA的最新更新提到了以下

  

我改变了运输方式。 LongPolling现在使用basic-http-client   而不是Aquery进行http通信。我删除了所有   依赖于Aquery。

因此,我不确定是否应该遵循此演示活动

更新2:

这是令我最困惑的事情 在IntentService中,OnHandleIntent方法在完成任务后调用stopSelf,当我真的希望IntentService中的代码始终保持运行时

  

protected abstract void onHandleIntent(Intent intent)   在API级别3中添加   在工作线程上调用此方法并请求处理。一次只处理一个Intent,但处理发生在独立于其他应用程序逻辑运行的工作线程上。因此,如果此代码需要很长时间,它将阻止对同一个IntentService的其他请求,但它不会阻止其他任何内容。处理完所有请求后,IntentService会自行停止,因此不应调用stopSelf()。

2 个答案:

答案 0 :(得分:2)

SignalA正在创建并启动连接的线程上运行,但所有网络访问都在后台完成。在起始线程上的剩余工作非常轻量级,因此在UI页面上完成它是完全可以的。

要回答您的问题,您需要有一个运行signala连接的线程。因此,我认为服务是最好的选择,因为SignalA需要一直运行。

关于Aquery和演示项目。我删除了库中的所有依赖项,而不是Demo。需要说明的是,您不需要Aquery来运行SignalA。

答案 1 :(得分:0)

在我的情况下,我想要的是服务而不是意图服务,因为我想要一些在应用关闭之前一直运行的东西