Android 用Greenrobot Eventbus代替广播接收器触发基于事件的功能和从服务到活动的数据传输是否合适?
我已经实现了一个服务,在这里我处理状态更改(连接、断开连接、onServiceDiscoverd、onCharacteristicChange等),并通过gatt服务器从另一个设备接收数据Android 用Greenrobot Eventbus代替广播接收器触发基于事件的功能和从服务到活动的数据传输是否合适?,android,android-service,bluetooth-lowenergy,android-broadcast,greenrobot-eventbus,Android,Android Service,Bluetooth Lowenergy,Android Broadcast,Greenrobot Eventbus,我已经实现了一个服务,在这里我处理状态更改(连接、断开连接、onServiceDiscoverd、onCharacteristicChange等),并通过gatt服务器从另一个设备接收数据 我的问题是,是否可以使用Greenrobot Eventbus在服务和活动之间替换广播接收器?与LocalBroadcastManager不同,Eventbus更易于使用。您只需执行3个步骤: 1-创建一个事件类。一个简单的Java类,用于在 动作发生了 2-在Activity onCreate方法中将事件总
我的问题是,是否可以使用Greenrobot Eventbus在服务和活动之间替换广播接收器?与LocalBroadcastManager不同,Eventbus更易于使用。您只需执行3个步骤: 1-创建一个事件类。一个简单的Java类,用于在 动作发生了 2-在Activity onCreate方法中将事件总线注册为订户
EventBus.getDefault().register(this);
当然,在ActivityOnDestroy方法中注销它
EventBus.getDefault().unregister(this);
3-订阅方法是在为EventBus注册的同一活动中创建的。工作实践中的例子
@Subscribe
public void onEvent(EventClass event)
当事件发生时,应该调用post方法,传递之前创建的事件对象
正如kmaini所提到的,您可以用LocalBroadcastManager替换它,但是您必须自己从intent映射数据。与可以传递对象的EventBus不同
此外,EventBus库的创建者greenrobot回答了这个问题:
问:EventBus与Android的BroadcastReceiver/Intent有何不同
系统
答:与Android的BroadcastReceiver/Intent系统不同,EventBus使用
标准Java类作为事件,并提供更方便的API。
EventBus适用于许多您不需要的情况
想经历设置意图、准备意图的麻烦吗
附加功能、实现广播接收器和提取意图
又是临时演员。此外,EventBus的开销要低得多
EventBus使事情变得更容易,因为您可以在事件中传递任意Java对象。您不能对
意图执行相同的操作,因为您的对象必须实现可包裹的
和“繁琐的”可打包的实现,在现有的代码基础上您可能不需要这样做。从另一个角度来看,我相信Android中的广播管理器使用主线程处理程序的消息队列来处理事件。因此,如果您可以自由地使用不同的线程(如果您没有UI事件/作业/任务)和适当的队列(如使用另一个HandlerThread),那么您可以利用该线程的特定队列来处理作业,而不会干扰UI事件,也不会将您的内容与UI工作混为一谈。您还可以使用线程的优先级值来平衡工作
现在,如果GreenRobot在几行代码中提供了所有功能,那么我肯定会尝试使用它来查看性能的提高。我没有使用GreenRobot Event,但是我不能对此发表评论。但一般来说,如果通信是在同一进程的活动和服务之间进行的,那么最好使用LocalBroadcastManager而不是BroadcastReceiver。@kmaini您遇到过对您非常有用的示例或链接吗?
EventBus.getDefault().post(new EventClass (Data));