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

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

我的代码示例如下:

signalAConnection = new com.zsoft.SignalA.Connection(Constants.getHubUrl(), this, new LongPollingTransport())
{
    @Override
    public void one rror(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 one rror(Exception ex)
    {
    }

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

发送和接收将在活动中发生,并且一些响应将随机发送,无论活动如何,只要应用程序正在运行(即使应用程序在后台运行),也应该打开连接,这就是为什么我希望将signalA连接实现为后台服务

问题是我应该将其实现为:

1 – 服务(http://developer.android.com/reference/android/app/Service.html)

要么

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的最新更新提到了以下内容

I have changed the transport. LongPolling now uses basic-http-client
instead of Aquery for http communication. I’ve removed all
dependencies on Aquery.

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

更新2:

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

protected abstract void onHandleIntent (Intent intent)
Added in API level 3
This method is invoked on the worker thread with a request to process. Only one Intent is processed at a time, but the processing happens on a worker thread that runs independently from other application logic. So, if this code takes a long time, it will hold up other requests to the same IntentService, but it will not hold up anything else. When all requests have been handled, the IntentService stops itself, so you should not call stopSelf().

解决方法:

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

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

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

上一篇:javascript – 初始加载和更新之间的SignalR


下一篇:c# – 是否有地方可以捕获所有信号错误?