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

Java Android异步事件处理(回调和事件总线),java,android,asynchronous,bluetooth,callback,Java,Android,Asynchronous,Bluetooth,Callback,我目前正在开发一款具有蓝牙低能耗功能的Android应用程序。Android BLE(蓝牙低能)方法调用本质上大部分(如果不是全部)是异步的。我已将此BLE处理功能封装到一个服务中,并尝试将应用程序的其他部分与“Android BLE库的特定实现/接口”分离。因为Android Bluetooth API是异步的,所以我尝试将Android BLE回调“传递”到调用模块 我的示例用例如下所示 externalModuleInstance.getSomeProperty()将调用bleServic

我目前正在开发一款具有蓝牙低能耗功能的Android应用程序。Android BLE(蓝牙低能)方法调用本质上大部分(如果不是全部)是异步的。我已将此BLE处理功能封装到一个
服务中
,并尝试将应用程序的其他部分与“Android BLE库的特定实现/接口”分离。因为Android Bluetooth API是异步的,所以我尝试将Android BLE回调“传递”到调用模块

我的示例用例如下所示

externalModuleInstance.getSomeProperty()
将调用
bleService.readCharacteristic(somePropertyId)
并且当在Android BLE堆栈中完成一些异步操作时,bleService将通过Android BLE API的回调得到结果通知如何将此结果传递回externalModuleInstance?

我提出了三个选项:回调、侦听器和EventBus(由greenrobot提供)

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