Android异步事件处理(回调和事件总线)

时间:2015-04-17 04:55:47

标签: java android asynchronous bluetooth callback

我目前正在开发具有蓝牙低功耗功能的Android应用程序。 Android BLE(蓝牙低功耗)方法调用大多数(如果不是全部)异步性质。我已将此BLE处理功能封装到Service中,并试图将应用程序的其他部分与“Android BLE库的特定实现/界面”分离。由于Android蓝牙API是异步的,我试图将Android BLE回调“传递”到调用模块。

我的示例用例如下所示。

externalModuleInstance.getSomeProperty()将调用bleService.readCharacteristic(somePropertyId),当在Android BLE堆栈中完成某些异步操作时,bleService将通过Android BLE API回调结果得到通知。 我应该如何将此结果传回 externalModuleInstance

我想出了三个选项:回调,听众和EventBus(由greenrobot提供)。

  1. 听众:我会定义BleServiceInterface并定义一些onSomeEvent()方法,并在ExternalModule中实现此接口。然后我将这个ExternalModule实例注册为BleService的监听器。这似乎很好,界面声明似乎清晰明了。
  2. EventBus :我喜欢这个模块,因为它简单而优雅,但我不认为这是事件总线的正确用例(小写意图),因为ExternalModule特定类/事件类型不感兴趣,而是对BleService的结果感兴趣。
  3. 回调:下行似乎是我必须为每种类型的结果定义每个类。我可以使用泛型,但最终我必须提供事件类(有点像C结构),所以我认为它是一样的。如果我决定动态使用实例化回调类并传递给方法参数,那么代码看起来会更加嵌套和复杂。 然而,我觉得回调是这种情况下的方法,因为它似乎是接收异步调用结果的正确机制,因为它是每个方法的作用域。
  4. 我真的很好奇别人对这个问题的看法以及在这种情况下使用什么,以及一般的异步事件处理。请随时纠正和教育我!

0 个答案:

没有答案