我有一个单线程Android应用程序,用于从信标中读取数据。我今天有一个处理信标读数的服务(mainactivity刚开始这个服务)。我注意到我的代码库变得越来越复杂,需要进行分区。
我希望有一个生产者线程从BLE Scan获取来自回调的数据,并放入消费者线程(=现有服务??)将处理的队列中。但我对这个消费者线程的看法感到困惑;因为消费者线程(=现有服务)也从1)GUI获取事件,这是主要活动,2)是androidmanifest.xml中定义的几个接收器。
因此,消费者线程无法阻塞队列,而且还有一些如何处理来自GUI和接收器的事件。我怎样才能做到这一点?
修改
这是一个24/7应用程序,总是在后台运行并扫描信标。此外,定期将数据推送到AWS。因为我们大约每秒都会得到回调,所以通过Intent将它们传递给服务是很昂贵的(Intent =线程创建和销毁)。由于app必须处理扫描的值并将数据推送到AWS,我们将延迟/阻止来自BLE扫描的回调(从记录的时间戳开始,我注意到由于代码中的处理开销,我每3秒钟就会收到一次回调;而没有任何处理的相同代码库只是每500毫秒扫描一次)。因此,我正在考虑多线程代码生成器和消费者模型
答案 0 :(得分:0)
单个IntentService
可以在短期线程中处理不同的消息,包括:
这些事件中的每一个都将通过Intent
传递给服务,并附加说明要处理的事件和要使用的数据。只要处理每个事件,线程就会启动并生效。线程中的代码将根据传递的数据调整服务的内部状态。
如果不确切地知道自己要做什么,很难说更多,但IntentService
听起来就像是匹配您的用例的最接近的构造。