`
wkwukong
  • 浏览: 9698 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Guava event bus 简单例子

阅读更多

最近项目中用到了GUAVA的eventbus来做异步操作,感觉很顺手,这里写了个小demo,作为备忘:(引入guava 18.0版本

 

1.AppEventBus类:用来注册,执行和卸载事件,内部实例化了一个AsyncEventBus类,用线程池开了四个线程。

2.StringMessageEvent:事件类。

3.StringMessageListener类:监听者,会实例化一个AppEventBus和一个具体业务处理类StringMsgHandler。当监听到StringMessageEvent事件的时候,会执行 带有 @Subscribe 注解的方法。

4.StringMsgHandler:具体处理业务的类。

 

上代码:

 

public class AppEventBus {

    private final AsyncEventBus eventBus;

    public AppEventBus(){
        this.eventBus = new AsyncEventBus(Executors.newFixedThreadPool(4));
    }

    /**
     * 注册事件
     */
public void register(Object object){
        eventBus.register(object);
    }

    /**
     * 执行事件
     * @param object
*/
public void post(Object object){
        eventBus.post(object);
    }

    /**
     * 卸载事件
     * @param object
*/
public void unRegister(Object object){
        eventBus.unregister(object);
    }

}



public class StringMessageEvent {
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public StringMessageEvent(String message) {
        this.message = message;
    }
}



public class StringMessageListener {

    private  AppEventBus eventBus;

    private  StringMsgHandler msgHandler;

    public StringMessageListener(AppEventBus eventBus, StringMsgHandler msgHandler) {
        this.eventBus = eventBus;
        this.msgHandler = msgHandler;
    }

    public void init(){
        this.eventBus.register(this);
    }

    @Subscribe
public void handle(StringMessageEvent messageEvent){
        for(int i = 0;i<100;i++) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(messageEvent.getMessage()).append(" thread : ").append(Thread.currentThread().getId());
            msgHandler.printMsg(stringBuilder.toString());
        }
    }
}




public class StringMsgHandler {

    public void printMsg(String msg){
        StringBuilder  stringBuilder = new StringBuilder();
        stringBuilder.append(msg).append(" in ").append(new Date());
        System.out.println(stringBuilder.toString());
    }
}


//test类
public class TestGuava {
    public static void main(String[] args){
        AppEventBus appEventBus = new AppEventBus();
        StringMsgHandler handler = new StringMsgHandler();
        StringMessageListener listener = new StringMessageListener(appEventBus,handler);
        listener.init();
        for(int i = 0;i<10;i++) {
            appEventBus.post(new StringMessageEvent("hello World" + i));
        }
    }
}

运行结果里可以清晰的看到四个线程之间的切换。
分享到:
评论

相关推荐

    Java Event Bus 事件监听器的应用

    在Event Bus中,事件(Event)是一个简单的Java对象,包含了需要传递的信息。发布者(Publisher)通过Event Bus发送事件,而订阅者(Subscriber)注册到Event Bus上,监听特定类型的事件。当事件被发布时,Event ...

    Node.js-EventBus简单使用实例学习使用开源库提高开发效率与速度

    针对Android平台,"Node.js-EventBus简单使用实例学习使用开源库提高开发效率与速度"这个主题聚焦于如何利用EventBus库来实现这一目标。EventBus是一种发布/订阅事件总线,它简化了组件之间的通信,使得Android应用...

    Otto实战例子

    - Otto是基于Guava的Bus实现,针对Android优化,避免了复杂的回调和直接引用,提高了代码的可测试性和可维护性。 2. **Otto的安装与引入** - 在项目中添加Otto依赖,通常通过Gradle构建系统,在build.gradle文件...

    otto事件总线两个类之间的传参

    Otto事件总线是由Square公司开发的一个轻量级的事件总线库,它基于Google的Guava库中的EventBus,旨在简化Android应用中的组件间通信。在这个“otto事件总线两个类之间的传参”示例中,我们将深入探讨如何利用Otto...

    最新otto包android 消息机制 demo

    开发者可以创建一个或多个Bus实例,但通常一个就足够了。 - **事件(Event)**: 事件是Otto中用来传递数据的对象。它们应该是不可变的,并且通常继承自`java.lang.Object`。 - **发布(Publishing)**: 当你需要在组件...

    android otto

    2. **创建 Bus 实例**: 通常在 Application 类中初始化一个 Bus 实例。 3. **定义事件类**: 创建一个 Java 类作为事件,不需要实现任何特定接口。 4. **发布事件**: 在需要的地方,使用 Bus 实例的 `post()` 方法...

    Node.js-EventBusOttoRxBus事件总线使用

    在Android应用开发中,事件总线(Event Bus)是一种设计模式,用于简化组件之间的通信,它替代了传统的回调或显式接口调用。本教程将详细讲解Node.js中的EventBus、Otto以及RxBus这三种事件总线的使用方法。 首先,让...

    Android和Java的事件总线,简化了activity、Fragments、thread、Services等之间的.zip

    - **事件(Event)**:在发布者和订阅者之间传递的信息,通常是一个简单的Java类,可以包含任意数据。 - **事件总线(Bus)**:负责事件的分发,连接发布者和订阅者。 2. **使用步骤**: - **初始化**:在...

    CubestackOttoDemo:Otto事件总线演示应用程序-显示ActivityFragments之间的通信

    首先,Otto事件总线的初始化通常在Application类中完成,创建一个Bus实例,并将其注册到全局变量中,供整个应用使用。在"CubestackOttoDemo"中,这一步可能是在应用启动时完成的。 然后,每个需要发送或接收事件的...

Global site tag (gtag.js) - Google Analytics