Android IntentService中的套接字侦听器

Android IntentService中的套接字侦听器,android,sockets,android-broadcast,android-intentservice,Android,Sockets,Android Broadcast,Android Intentservice,在我的程序中,我通过IntentService类中的套接字接收数据,然后将数据作为广播发送给activity。活动处理输入并准备输出 while (true) { socket = serverSocket.accept(); //Read data from socket //Publishing as a broadcast } 现在我的问题是 如何将活动的输出发送到intentService? 我知道我可以向i

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

while (true) {

            socket = serverSocket.accept();

            //Read data from socket

            //Publishing as a broadcast }
现在我的问题是

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

  • 任何见解都会有帮助。

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

    IntentService
    是错误的行为选择。您应该使用常规的
    服务
    ,自己管理线程和连接


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

    您的意思是希望此循环继续,同时读取循环内活动发送的数据?是的,类似的,您可以将数据添加到队列中,然后从循环内的队列中提取。不确定向队列中添加数据是什么意思?你能说得更具体一点吗?实际上,我最终使用了一个单例,在一个工作线程中创建了套接字侦听器,并对其进行了管理。