IntentService 中的套接字侦听器

Socket listener in IntentService

在我的程序中,我通过 IntentService class 中的套接字接收数据,然后将其作为广播发送到 activity。 Activity 处理输入并准备输出。

while (true) {

            socket = serverSocket.accept();

            //Read data from socket

            //Publishing as a broadcast }

现在我的问题是

  1. 如何将 activity 的输出发送到 intentService? 我知道我可以向 intentService 发出新的意图,但由于我的 while 循环已经 运行 处于无限循环中,这不会被排队并且可能永远不会执行吗?
  2. 即使我设法从 activity 获取数据到 intentService,我如何使用相同的套接字连接写回客户端,或者我是否应该为此创建一个单独的线程?

任何见解都会有所帮助。

我认为您应该更改您的实现,因为 IntentService 只有一个线程并且被 accept 调用阻塞。可能您应该创建两个单独的线程来接受连接和处理连接的套接字。使用这种方法,您可以使用静态对象或通过广播接收器轻松共享数据到连接的套接字线程。请参考 android sdk 中的 Bluetoothchat 示例。

IntentService 是这种行为的错误选择。您应该使用常规 Service 并自己管理线程和连接。

然后您可以通过使用包含数据的 Intent 调用 startService() 将数据从 Activity 发送到服务,或者您可以让 Activity 绑定到服务并使用 AIDL(远程过程调用)。