Android:重新设计传感器数据的生产者消费者/方法

时间:2016-06-25 05:18:49

标签: android ibeacon ibeacon-android android-ibeacon

我有一个单线程Android应用程序,用于从信标中读取数据。我今天有一个处理信标读数的服务(mainactivity刚开始这个服务)。我注意到我的代码库变得越来越复杂,需要进行分区。

我希望有一个生产者线程从BLE Scan获取来自回调的数据,并放入消费者线程(=现有服务??)将处理的队列中。但我对这个消费者线程的看法感到困惑;因为消费者线程(=现有服务)也从1)GUI获取事件,这是主要活动,2)是androidmanifest.xml中定义的几个接收器。

因此,消费者线程无法阻塞队列,而且还有一些如何处理来自GUI和接收器的事件。我怎样才能做到这一点?

修改

这是一个24/7应用程序,总是在后台运行并扫描信标。此外,定期将数据推送到AWS。因为我们大约每秒都会得到回调,所以通过Intent将它们传递给服务是很昂贵的(Intent =线程创建和销毁)。由于app必须处理扫描的值并将数据推送到AWS,我们将延迟/阻止来自BLE扫描的回调(从记录的时间戳开始,我注意到由于代码中的处理开销,我每3秒钟就会收到一次回调;而没有任何处理的相同代码库只是每500毫秒扫描一次)。因此,我正在考虑多线程代码生成器和消费者模型

1 个答案:

答案 0 :(得分:0)

单个IntentService可以在短期线程中处理不同的消息,包括:

  1. 扫描数据
  2. GUI事件
  3. 其他接收器
  4. 这些事件中的每一个都将通过Intent传递给服务,并附加说明要处理的事件和要使用的数据。只要处理每个事件,线程就会启动并生效。线程中的代码将根据传递的数据调整服务的内部状态。

    如果不确切地知道自己要做什么,很难说更多,但IntentService听起来就像是匹配您的用例的最接近的构造。