`

EventBus

阅读更多

参考网址:http://greenrobot.org/eventbus/

引入EventBus:
compile 'org.greenrobot:eventbus:3.0.0'

1.快速入门

step1:定义事件
public class MessageEvent {
    public final String message;

    public MessageEvent(String message) {
        this.message = message;
    }
}
step2:接收并处理事件

相应生命周期方法中注册和解注册

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

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

 定义处理事件方法

// This method will be called when a MessageEvent is posted (in the UI thread for Toast)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show();
}
// This method will be called when a SomeOtherEvent is posted
@Subscribe
public void handleSomethingElse(SomeOtherEvent event) {
    doSomethingWith(event);
}

step3:发送事件

EventBus.getDefault().post(new MessageEvent("Hello everyone!"));

2.定义不同线程中处理事件

 

@Subscribe(threadMode = ThreadMode.POSTING) // 和发布者在同一个线程,默认的
public void onMessage(MessageEvent event) {
    log(event.message);
}

// UI线程处理
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent event) {
    textField.setText(event.message);
}

// 后台线程处理
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessage(MessageEvent event){
    saveToDisk(event.message);
}

// 单独的一个线程 线程池机制
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessage(MessageEvent event){
    backend.send(event.message);
}

3.Sticky Events  粘性事件

使用场景:例如想要在Activity初始化前发送事件在Activity启动后执行

发送一个粘性事件:EventBus.getDefault().postSticky(new MessageEvent("Hello everyone!"));

处理接收   

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

    @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent event) {
        // UI updates must run on MainThread
        textField.setText(event.message);
    }

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

 获取或销毁粘性对象

MessageEvent stickyEvent = EventBus.getDefault().getStickyEvent(MessageEvent.class);
// Better check that an event was actually posted before
if(stickyEvent != null) {
    // "Consume" the sticky event
    EventBus.getDefault().removeStickyEvent(stickyEvent);
    // Now do something with it
}

4.优先级

默认优先级是0 优先级越高先执行  不过不能影响不同线程之间的接收

@Subscribe(priority = 1);
public void onEvent(MessageEvent event) {

}

可以在高优先级截断低优先级的处理

@Subscribe
public void onEvent(MessageEvent event){
// Process the event

EventBus.getDefault().cancelEventDelivery(event) ;
}

5.混淆

-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}

 

分享到:
评论

相关推荐

    eventBus 3.0 带有注释的源码

    EventBus 是一个轻量级的事件总线库,它用于 Android 应用程序中的组件间解耦通信。在 Android 开发中,它提供了一种替代传统回调或接口传递消息的方法,使得不同组件间的通信变得更加简单和灵活。EventBus 3.0 版本...

    Android 自己实现组件间通信框架EventBus

    【Android 自己实现组件间通信框架EventBus】 EventBus 是一个流行且轻量级的 Android 组件间通信库,它简化了应用程序中的事件发布/订阅机制。传统的 Android 通信方式,如 Intent、BroadcastReceiver 或者回调...

    Node.js-Eventbus3.0简单使用适合初学者使用

    **Node.js-Eventbus3.0简单使用适合初学者使用** 在Node.js开发过程中,有时候我们需要在不同的模块之间传递事件,实现解耦合和高效通信。这就是EventBus(事件总线)的概念,它模仿了Android中的EventBus库,提供...

    Android EventBus使用,粘性事件postSticky使用

    在Android开发中,EventBus是一个轻量级的事件发布/订阅框架,它简化了应用程序组件之间的通信。相较于传统的BroadcastReceiver,EventBus提供了更加灵活、高效和低耦合的事件传递方式。本文将深入探讨如何使用...

    SpringBoot+EventBus使用教程示例代码

    在本文中,我们将深入探讨如何在SpringBoot应用中使用EventBus,这是一个基于Guava库的事件总线系统。EventBus的引入使得松耦合的组件间通信变得更加简单和高效。让我们一起通过步骤来理解这个“SpringBoot+EventBus...

    EventBus替代Intent传递复杂数据的实例代码

    在这种情况下,`EventBus`作为一个轻量级的发布/订阅事件总线,可以作为Intent的一个有效替代方案,特别是在处理复杂数据结构和跨组件通信时。 `EventBus`由GreenRobot团队开发,它简化了Android组件间的通信,使得...

    Eventbus的详细使用

    **EventBus 概述** EventBus 是一个发布/订阅事件总线库,它简化了 Android 应用程序内的组件通信。传统的组件间通信方式,如使用 Handler 或接口回调,往往导致代码复杂度增加,可维护性降低。EventBus 的引入为...

    eventbus-3.1.1.jar

    EventBus 是一个流行的 Android 库,它简化了应用程序中的事件发布和订阅机制。这个库是由 GreenRobot 开发的,旨在替代传统的回调或者广播接收器,为开发者提供了一种更轻量级、更灵活的方式来处理组件间的通信。...

    EventBus的使用Demo

    EventBus 是一个流行的消息总线库,用于简化 Android 应用中的组件通信。它通过发布/订阅模式使得组件之间的交互更加灵活,降低了组件间的耦合度。在 Android 框架之路系列教程中,我们将会深入探讨如何有效地使用 ...

    EventBus详解示例Demo

    **EventBus详解** EventBus是一款轻量级的事件总线库,它简化了Android应用中的组件间通信。在传统的Android开发中,我们通常使用接口回调、BroadcastReceiver或静态内部类来实现组件间的通信,但这些方式往往使得...

    EventBus的简单示例code

    EventBus 是一个轻量级的事件总线库,它在Android开发中被广泛使用,用于组件之间的解耦通信。这个库使得应用程序中的不同组件(如Activity、Fragment、Service等)可以方便地通过发布和订阅事件来进行通信,而无需...

    EventBus源码及demo

    EventBus 是一个轻量级的事件总线库,它简化了 Android 应用中的组件通信。这个库由 Greenrobot 开发,它通过发布/订阅模式让组件之间能够解耦合地进行通信,避免了大量的回调函数或者冗余的接口实现。在 "EventBus...

    eventbus3.0.jar

    EventBus 是一个流行的消息总线库,专门为 Android 平台设计,用于简化应用程序中的事件通信。这个库由 Greenrobot 开发,它提供了一个发布/订阅模式的事件传递机制,使得组件之间的解耦变得简单而高效。标题中的 ...

    EventBus3.0的使用

    EventBus 是一个轻量级的事件总线库,它简化了Android应用内的组件通信。在Android开发中,组件之间的通信通常依赖于回调、接口或者Intent等机制,但这些方式有时会变得复杂,尤其是在多模块、多层级交互时。...

    EventBus 3使用记录demo

    **EventBus 3 使用记录与实战** EventBus 是 Android 开发中一个轻量级的发布/订阅事件总线,它简化了组件之间的通信,避免了因过度依赖于 Activity 和 Fragment 的回调导致的复杂性。本篇文章将深入探讨 EventBus ...

    eventbus-3.0.0.jar+eventbus-3.0.0-sources.jar

    EventBus 是一个流行于 Android 开发中的发布/订阅事件总线库,由 GreenRobot 团队开发。这个库简化了组件间的通信,使得应用程序的组件(如 Activities, Fragments, Services)无需直接耦合就可以相互通信。在 ...

    EventBus相关小案例

    EventBus 是一个 Android 开发中的轻量级事件总线库,它简化了应用程序组件之间的通信。这个"EventBus相关小案例"可能包含了如何在实际项目中应用 EventBus 的示例代码。下面,我们将深入探讨 EventBus 的核心概念、...

    C#版本EventBus事件总线实例源码(经典)

    在软件开发中,事件总线(EventBus)是一种设计模式,用于在组件之间解耦通信,使得各个组件可以独立地发布和订阅事件,而无需直接引用对方。C#作为.NET框架的主要编程语言,同样支持实现事件总线的概念。下面将详细...

    EventBus3.0使用demo案例

    EventBus 是一个在 Android 开发中广泛使用的发布/订阅事件总线库,它简化了组件间的通信,替代了传统的基于回调或意图(Intent)的通信方式。EventBus 3.0 版本是其稳定且功能强大的一个版本,提供了一些优化和改进...

    Flutter中EventBus的使用

    参考文档:电梯直达 EventBusUtils //订阅者回调签名 typedef void EventCallback(arg);... static EventBus _singleton = new EventBus._internal(); /// 工厂构造函数 factory EventBus() =&gt; _singleton; /// 保

Global site tag (gtag.js) - Google Analytics