同时收听服务中的多个流

Simultaneously listen to multiple streams in a service

我正在开发一个 Android 应用程序,它将数据从套接字连接中继到蓝牙接口。为了方便交流,我实例化了两个 BufferedReader,我想在 IntentService 中同时收听它们。此外,我希望该服务能够对蓝牙或 WiFi 连接丢失等事件作出反应。但是,服务应该 运行 直到在服务器界面上收到特定的退出命令。

到目前为止,我使用了两个线程,但我不知道如何满足我的要求。

解决方案

解决方案是使用常规 Service 而不是 IntentService。在服务中,我使用了两种异步方法,在我的例子中是 AsyncTasks 用于连接到蓝牙设备和服务器。建立连接后,我启动两个线程使用阻塞 readLine() 方法侦听数据。在服务中,我什么都不做,这让主线程可以自由处理蓝牙连接丢失。一旦用户希望断开连接,我的 activity 将终止服务。

不要使用 IntentService 来处理这个问题,而是使用您自己的 Service 派生实现。 IntentService 旨在处理临时后台线程上传入的 Intent 对象,然后在处理完所有 Intent 后完全关闭。您已经将大部分繁重的工作转移到您自己的后台线程中,因此无需使用 IntentService。但是,请确保您创建的任何 onStartCommand() 实现不会执行阻塞操作,因为它是在主线程上执行的。