同时收听服务中的多个流
Simultaneously listen to multiple streams in a service
我正在开发一个 Android 应用程序,它将数据从套接字连接中继到蓝牙接口。为了方便交流,我实例化了两个 BufferedReader
,我想在 IntentService
中同时收听它们。此外,我希望该服务能够对蓝牙或 WiFi 连接丢失等事件作出反应。但是,服务应该 运行 直到在服务器界面上收到特定的退出命令。
到目前为止,我使用了两个线程,但我不知道如何满足我的要求。
解决方案
解决方案是使用常规 Service
而不是 IntentService
。在服务中,我使用了两种异步方法,在我的例子中是 AsyncTasks
用于连接到蓝牙设备和服务器。建立连接后,我启动两个线程使用阻塞 readLine()
方法侦听数据。在服务中,我什么都不做,这让主线程可以自由处理蓝牙连接丢失。一旦用户希望断开连接,我的 activity 将终止服务。
不要使用 IntentService
来处理这个问题,而是使用您自己的 Service
派生实现。 IntentService
旨在处理临时后台线程上传入的 Intent
对象,然后在处理完所有 Intent
后完全关闭。您已经将大部分繁重的工作转移到您自己的后台线程中,因此无需使用 IntentService
。但是,请确保您创建的任何 onStartCommand()
实现不会执行阻塞操作,因为它是在主线程上执行的。
我正在开发一个 Android 应用程序,它将数据从套接字连接中继到蓝牙接口。为了方便交流,我实例化了两个 BufferedReader
,我想在 IntentService
中同时收听它们。此外,我希望该服务能够对蓝牙或 WiFi 连接丢失等事件作出反应。但是,服务应该 运行 直到在服务器界面上收到特定的退出命令。
到目前为止,我使用了两个线程,但我不知道如何满足我的要求。
解决方案
解决方案是使用常规 Service
而不是 IntentService
。在服务中,我使用了两种异步方法,在我的例子中是 AsyncTasks
用于连接到蓝牙设备和服务器。建立连接后,我启动两个线程使用阻塞 readLine()
方法侦听数据。在服务中,我什么都不做,这让主线程可以自由处理蓝牙连接丢失。一旦用户希望断开连接,我的 activity 将终止服务。
不要使用 IntentService
来处理这个问题,而是使用您自己的 Service
派生实现。 IntentService
旨在处理临时后台线程上传入的 Intent
对象,然后在处理完所有 Intent
后完全关闭。您已经将大部分繁重的工作转移到您自己的后台线程中,因此无需使用 IntentService
。但是,请确保您创建的任何 onStartCommand()
实现不会执行阻塞操作,因为它是在主线程上执行的。