Android/Sockets - 如何从主UI线程向套接字线程发送信息?

3
我过去的一天一直在阅读论坛,但似乎找不到一个可以帮助我解决问题的答案。
我正在尝试创建一个安卓socket/游戏客户端,需要实现以下功能:
1. 在与UI分离的新线程上连接到服务器(我希望保持此线程开放)。 2. 监听来自服务器的消息,并使用处理程序将其发送到UI线程。 3. 从主UI线程获取信息(例如用户输入、获取文本视图、按钮点击),然后将信息发送到服务器。 4. 继续监听/发送剩余的活动。
我在实现第三个功能时遇到了很多困难。最初连接到服务器的套接字位于它自己的线程中,我希望保持其无限期开放。有没有最好的方法可以从主UI线程获取信息,以便我可以使用该线程和套接字向服务器发送信息?
我看到很多帖子都是关于如何从后台线程返回信息到UI线程,但没有反过来的情况。是否有一种标准方法可以做到这一点?
谢谢!

请查看LocalBroadcastManager以进行进程内通信。本地广播实际上是一个安全编码指南建议。本地广播可能会引导您前往Stack Overflow上的如何使用LocalBroadcastManager? - jww
您还需要阅读有关工作线程异步任务的内容。 - jww
为#3打开第二个套接字。每条消息都只需打开和关闭一次。您可以在AsyncTask中完成此操作。第一个套接字继续监听来自服务器的未请求的消息。 - greenapps
如果每次打开一个套接字,那似乎会产生很多开销。这是否与仅使用HTTP GET / POST相同? - John Liu
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接