【问题标题】:Android/Sockets - How to send information from main UI thread to socket thread?Android/Sockets - 如何将信息从主 UI 线程发送到套接字线程?
【发布时间】:2014-08-05 18:19:51
【问题描述】:

过去一天我一直在阅读论坛,但似乎找不到有助于解决我的问题的答案。

我正在尝试创建一个 android 套接字/游戏客户端:

  1. 在与 UI 不同的线程上的新套接字上连接到服务器(我希望保持打开状态)
  2. 在套接字上侦听来自服务器的消息,并使用处理程序将其发送到 UI 线程。
  3. 从主 UI 线程(即用户输入、获取文本视图、按钮点击)获取信息,然后将信息发送到服务器。
  4. 在活动的其余部分继续收听/发送。

我在实施 #3 时遇到了很多困难。最初连接到服务器的套接字在它自己的线程中,我想无限期地保持打开状态。从主 UI 线程获取信息以便我可以使用该线程和套接字将信息发送到服务器的最佳方法是什么?

我看到很多关于将信息从后台线程返回到 UI 线程的帖子,但反之则不然。有这样做的标准方法吗?

谢谢!

【问题讨论】:

  • 查看LocalBroadcastManager 了解进程内通信。本地广播实际上是一种安全编码指南推荐。本地广播可能会将您带到 Stack Overflow 上的How to use LocalBroadcastManager?
  • 您还想了解Worker ThreadsAsyncTasks
  • 为#3 打开第二个套接字。只需为每条消息打开和关闭它。您可以在 AsyncTask 中执行此操作。第一个套接字一直在监听来自服务器的 -unrequested- 消息。
  • 如果我每次都打开一个套接字,那似乎会产生很多开销。这和只使用 HTTP GET/POST 是一样的吗?

标签: java android multithreading node.js sockets


【解决方案1】:

我找到了一个解决方案,我使用了一个在 UI 线程和套接字线程之间共享的 BlockingQueue。 UI 线程在想要放置要发送到服务器的信息时使用 queue.put(),而套接字线程在 queue.take() 上等待获取信息并将其发送到服务器。

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 2014-09-22
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多