用Greenrobot Eventbus替换广播接收器以触发基于事件的功能和从服务到活动的数据传输是否有用?

Din*_*avi 17 android android-service bluetooth-lowenergy android-broadcast greenrobot-eventbus

我已经实现了一个服务,我处理状态更改(连接,断开连接,onServiceDiscoverd,onCharacteristicChange等)并通过gatt服务器从另一个设备接收数据.

我的问题是,使用Greenrobot Eventbus 在服务和活动之间替换广播接收器可以有效地处理事件吗?

Abd*_*Aly 14

与LocalBroadcastManager不同,EventBus更易于使用.你只需经​​过3个步骤:

1-创建一个事件类.一个简单的Java类,表示操作发生时的响应.

2-在Activity onCreate方法中将订户注册为订户

  EventBus.getDefault().register(this);
Run Code Online (Sandbox Code Playgroud)

当然,请在Activity onDestroy方法中取消注册

 EventBus.getDefault().unregister(this);
Run Code Online (Sandbox Code Playgroud)

3-订阅方法是在为EventBus注册的同一活动中创建的.WorkOrderActivity中的示例

   @Subscribe
    public void onEvent(EventClass event)
Run Code Online (Sandbox Code Playgroud)

当事件发生时,您应该调用post方法,传递您之前创建的事件对象.

  EventBus.getDefault().post(new EventClass (Data));
Run Code Online (Sandbox Code Playgroud)

正如kmaini所提到的,你可以用LocalBroadcastManager替换它,但是你必须自己映射意图中的数据.与可以传递对象的EventBus不同.

此外,EventBus Library的创建者greenrobot 在这里回答了这个问题:

问:EventBus与Android的BroadcastReceiver/Intent系统有何不同?

答:与Android的BroadcastReceiver/Intent系统不同,EventBus使用标准Java类作为事件,并提供更方便的API.EventBus适用于更多用例,您不希望经历设置Intent,准备Intent附加功能,实现广播接收器以及再次提取Intent附加功能的麻烦.此外,EventBus的开销要低得多.