2015-06-10 121 views
0

在我的程序中,我通过IntentService类中的套接字接收数据,然后将其作为广播发送给活动。活动处理输入并准备输出。IntentService中的套接字监听器

while (true) { 

      socket = serverSocket.accept(); 

      //Read data from socket 

      //Publishing as a broadcast } 

现在的问题是

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

任何洞察将有所帮助。

+0

你的意思是你想让这个循环继续并同时读取循环内部活动发送的数据? – 7383

+0

是类似的东西 – Raghav

+0

您可以将数据添加到队列中并从循环中的队列中获取 – 7383

回答

1

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

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

+0

我实际上最终使用了一个Singleton,并在工作线程中创建了套接字侦听器,并对其进行管理。 – Raghav

1

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

+0

感谢您指出问题和样本 – Raghav

+0

很高兴听到您已解决问题。 – 7383