首页 > 解决方案 > 如何在 Android java 的线程中使用 Signalr?

问题描述

我想在android java中使用signalr,我找到了signalr java sdk,并将它们实现到我的android项目中。

我可以通过 SignalR 从 android 客户端向服务器发送消息,并且我在使用 HandlerThread 构建的后台线程下获取此过程。

这是代码片段:

HandlerThread handlerThread = new HandlerThread("ServerResponseHandlerThread",Process.THREAD_PRIORITY_BACKGROUND);
handlerThread.start();
Handler handler = new Handler(handlerThread.getLooper());

handler.post(Program::PingPong);

乒乓球功能:

while (true) {
    ConnectionState connectionState = HubConnection.getState();

    if(connectionState == ConnectionState.Connected) {
    }
    else if(connectionState == ConnectionState.Reconnecting || connectionState == ConnectionState.Connecting) {
        try {
            HubConnection.stop();
        } catch(Exception ignored) {
        }
    }
    else if(connectionState == ConnectionState.Disconnected) {
        try {
            Platform.loadPlatformComponent(new AndroidPlatformComponent());

            HubConnection = new HubConnection(Global.ServerIP);
            HubProxy = HubConnection.createHubProxy("SignalRHub");

            HubProxy.subscribe(this);

            ClientTransport clientTransport = new ServerSentEventsTransport(HubConnection.getLogger());
            SignalRFuture<Void> signalRFuture = HubConnection.start(clientTransport);

        signalRFuture.get();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    HubProxy.on("response", (method, json) -> {
        switch (method) {
            case "PingPong":
                signalR.ResponseHandler.PingPong();
                break;
            }

            }, String.class, String.class);
    }

    Thread.sleep(1000);
}

当我试图在后台线程中获取服务器响应时,无法从服务器获取数据。如果我在 UI 线程上使用此代码,它可以工作,但我使用无限循环锁定 UI 线程,我不想锁定 UI 线程。

有没有可能的方法在后台线程中使用带有无限循环的信号器?此外,我想在这个线程中获得服务器响应而不锁定 UI 线程。

加上这种情况,我想用后台线程结果更改 UI 组件。

我该怎么做所有这些?

标签: javaandroidmultithreadingandroid-studiosignalr

解决方案


考虑到 SignalR 在幕后的工作方式,这似乎(嗯,是)有点过度设计。您是否查看过的结构以及它自己产生的线程?它已经大量使用了 Futures 和 Threads。那么,您在另一个线程上创建它的动机是什么?此外,这Thread.sleep(1000)是我将给出的提示之一,为什么它可能无法按预期工作,但可以在主线程上工作。

其次,注意这个类......它会显示大量的工作已经在AsyncTask.

同样在同一个 repo 下,还有一个指向 android 集成示例用法的链接,这可能会有所帮助。


推荐阅读