java - 如何在 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 组件。
我该怎么做所有这些?
解决方案
推荐阅读
- kotlin - kotlin 中与平台无关的 Web 框架
- python - 在烧瓶上执行 py 脚本的问题
- ios - 核心数据对象保存没有错误,但数据检索方法不会立即显示保存的结果
- sql - DB2 SQLPL - 无法退出无限循环
- python - 错误:在 Python 3.8 (Windows) 上安装 Kivy 时命令出错,退出状态为 255
- python - 有没有办法从列表中获取一个元素并以变量的名称使用它?
- macos - 在 macOS 上启动 Minikube 时权限被拒绝
- r - 地图图例所需的 R 代码帮助不在正确的位置
- python - woocommerce rest api python 获取产品
- c# - 如何使用 nim-lang 中的 ImportDll 在 DotNet Core 中调用字符串函数