代码之家  ›  专栏  ›  技术社区  ›  Android

如何在android中使用事件总线库

  •  2
  • Android  · 技术社区  · 8 年前

    我试图使用事件总线库,但我不理解它的功能,并看到了多个示例。是只使用服务类还是使用活动和片段,然后是使用活动,在什么情况下我们在活动或片段中使用事件总线。

    4 回复  |  直到 8 年前
        1
  •  4
  •   Sasi Kumar    8 年前

    代替接口,我们可以简单地使用EventBus。我们可以将消息从一个类传递到一个或多个类。EventBus分3个步骤

    • 定义
    • 事后

    定义事件:

    public static class MessageEvent { /* your getter and setter */   }
    

    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent(MessageEvent event) {
       /* event fire here when you post event from other class or fragment */
      };
    

    注册和注销您的订户。例如,在Android上,活动和片段通常应根据其生命周期进行注册:

    @Override
    public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);//Register 
     }
    

    注销

    @Override
    public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);//unregister
    }
    

    活动后:

    EventBus.getDefault().post(new MessageEvent());//post event
    
        2
  •  3
  •   Rahul Chowdhury    8 年前

    您可以将EventBus视为一个轻量级通信通道,用于在活动、服务、片段或它们之间传递数据。

    将EventBus视为 应用程序中的底层 其独立于任何活动或服务或片段及其生命周期。

    How an EventBus works

    EventBus工作的主要概念是: 订阅活动 在活动、片段、服务或任何类似组件中,只要事件总线 类型的特定事件 你订阅了 通知您订阅的方法 在该组件中,您可以根据收到的事件执行任何任务。

    触发事件很简单,您可以从应用程序的任何区域进行触发,只需 传递特定事件 ( 这基本上是一个POJO类 MyEvent

    我建议你试一试 事件总线3 来自GreenRobot,并在这里查看他们的文档,将他们的库合并到您的代码中。我一直在使用,没有任何问题。

    EventBus 3 by GreenRobot

    希望这有帮助。

        3
  •  2
  •   Gabe Sechan    8 年前

    大多数情况下,你不应该。一般来说,当你的程序架构错误,并且由于你的应用程序是如何封装的,以及什么对象在什么级别上是已知的,所以无法轻松地将数据从一个点传递到另一个点时,这是一种黑客行为。它可能导致真正的意大利面代码,很难确定事件发生时实际调用什么代码。您不应该围绕事件总线编写代码,如果您不能以正确的方式进行重构,它应该是最后的手段。

        4
  •  1
  •   Julius    8 年前

    事件的优点之一是,您可以将对象传递到“某处”,而不需要知道它在哪里被拾取。这使得将活动或片段状态推送到控制器类,然后使用从该控制器发送回活动或片段的事件变得容易。

    由于事件,控制器不需要知道接收端是活动还是片段。这使得从一个切换到另一个非常容易。另一方面,这也使得将控制器放置在其他地方变得容易。比如,首先将其作为应用程序类中的实例,然后将其移动到服务中。

    我写了一篇文章,其中有一个非常具体的例子,说明如何使用事件来处理如上所述的Android生命周期: https://medium.com/@JuliusHuijnk/beating-the-android-life-cycle-d00a2f3ed88