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

4
在我的Android应用程序中,我正在实现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

2 - 一个Intent Service(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()。


大家好,我真的需要一些帮助,请告诉我如果你有任何问题。 - Mohamed Heiba
2个回答

2
SignalA正在运行于创建和启动连接的线程上,但所有网络访问都在后台完成。开始线程上剩余的工作非常轻量级,因此在UI线程上做它是完全可以的。
要回答你的问题,你需要有一个线程来运行SignalA连接。因此,我认为Service是最好的选择,因为SignalA需要一直运行。
关于Aquery和演示项目。我已经从库中删除了所有对Aquery的依赖,但未从Demo中删除。明确一下,你不需要Aquery来运行SignalA。

感谢您的评论以及在使 SignalR 适用于 Android 方面所做的出色工作,没有您就不可能做到这一点:D 我在使用 SignalR 的过程中遇到了其他与连接丢失、重新连接等相关的问题,但我想我会另外发一个问题。谢谢! - Mohamed Heiba

0
在我的情况下,我想要的是一个服务而不是意图服务,因为我需要一个能一直运行到应用关闭的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接