在发送UDP数据报的Android应用程序中使用线程与处理程序与异步任务



在开发我的第一个Android应用程序时,我有以下问题需要解决:
该应用程序每秒从蓝牙传感器接收大约100个测量值。这些测量值现在应该通过网络流式传输到另一个设备。

由于传感器值应该尽快可用,我打算通过UDP将它们从智能手机发送到网络设备。然而,我不确定设置UDP套接字和发送逻辑的最佳方法是什么

我发现了几个使用ThreadHandlerAsyncTaskRunnable等结构的多线程示例,但这些示例似乎都不适合我的问题。例如,有些似乎为每个要发送的消息生成一个线程——这对我的应用程序场景来说似乎是一个不必要的开销。

我的想法是让主线程生成一个子线程,该子线程创建UDP套接字,并不断检查传入消息的队列,并通过UDP数据报发送队列中接收到的消息。我会很高兴并感谢一些指针,用于处理线程的结构可以实现这一点。

您有一个真正的技术组合,它们不会填补同一个空缺。难怪你会感到困惑。

可运行-这只是一个可以随时保存和调用的函数。它可能在编写解决方案时有用,但它本身并没有提供任何异步能力。

处理程序-处理程序是在特定线程上运行的消息队列。那个线程一定设置了一个Looper。如果您想将消息从一个线程发布到另一个线程,这可以是消息传递机制,但它本身并不提供异步功能。

线程-是一个实际的线程。它是一个可以与主线程并行运行的函数。这可能是你真正想要的。

AsyncTask-基本上是一个在运行某些代码之前和之后在主线程上运行某些代码的线程。它消除了传递信息的负担。这是一个简化,但它是一个足够好的解释。AsyncTasks应仅用于一次性快速操作。虽然你会看到它被用于HTTP传输的例子,但它真的不应该

基本上,您想要的是异步部分的线程,以及向该线程传递消息的方法。一个有自己的Looper和一个用于该Looper的Handler的线程会很好地工作。然后线程可以从该处理程序中读取消息,传感器读取代码可以将其发布到处理程序。当线程有工作要做时,它本身将在后台运行,直到您在关闭时中断它以结束线程。

最新更新