4

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

我的代码示例如下:

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 - 意图服务(http://developer.android.com/training/run-background-service/create-service.html

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

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

谢谢阅读。

更新:

请参阅开发人员制作的这个演示活动,了解他如何实现 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()。

4

2 回答 2

2

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

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

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

于 2013-09-19T05:54:07.123 回答
0

在我的情况下,我想要的是一个服务而不是一个意图服务,因为我想要一些可以一直运行到应用程序关闭的东西

于 2013-08-14T04:29:57.910 回答