`

eventbus 事件总线-dhroid文档

阅读更多

你听过onClick 事件,onItemClick 事件,事件总线不一定听过吧,

eventbus 事件总线也是一个编程思想,为什么要设计EventBus了,因为他是领域驱动设计中比不可少的模块,它承担传输数据的作用,它可以解耦模块之间的耦合性。

在android开发过程中,我们总会遇到各个组件模块之间的通信,当功能点越来越多的时候,组件间的通信难免会变得混乱

 

我们还是已事例说明为什么要用eventbus

 

 

假设你有A,B,C,D,E,F几个页面,
A 是列表,A->B,或者A->C
B->D->E-F
F 是发布页,
A页面从B,C,D,E返回时都是不需要刷新的,只有从F返回,A才需要刷新
这种情况不知道各位是怎么解决的

 

在说个你有一个service是轮询后台服务器的查看用户消息数,当有新消息时,如果用户在msg页面,需要刷新当前页
你是通过广播机制处理吗?写起来很烦吧

 

 

还有假设在第一个页面的左侧滑中,会显示用户的头像,用户名等信息,你是每次打开侧滑时你是一直获取数据吗,当然有人知道可以放到perference中
但是什么时候更新perference中的数据了,用户更新了各种资料,发布了什么都可以更新数据,维护这个更新也不容易吧

说了这么多一直没说重点下下面开始

 

使用eventbus只需要在类中注入一个eventbus单例接口(IOC的知识请先看前面的文档)

 

@Inject
EventBus bus;

 然后我们可以在需要监听事件的地方

 

 

     //这个是在后台处理事件
      bus.registerListener("事件名", "监听器名字", new OnEventListener(){
			@Override
			public Boolean doInBg(Event event) {
				 super.doInBg(event);
				 Log.v(log_tag, "我是在后台线程处理的请勿操作UI,我接受到的参数是"+event.getParams()[0]);
				return false;
			}
		});
或者
        //这个是前台处理事件
	bus.registerListener("事件名", "监听器名字", new OnEventListener(){
			@Override
			public Boolean doInUI(Event event) {
				 super.doInUI(event);
     			         dialoger.showToastShort(EventBusOneActivity.this, 我是在UI线程处理的,我接受到的参数1是"+event.getParams()[0]+"我接受到的参数2是"+event.getParams()[1]);
     			        return false;
			}
		});


 这样就可以注册事件监听了

发布事件

	bus.fireEvent("事件名","可以传递多个参数","参数2");

取消监听

       bus.unregisterListener("事件名","监听器名");

 

 

 

 

上面是事件监听和发布的基本模式

 

注意,我们的监听是有延时的,就是说registerListener时,eventbus会将之前发布的事件触发一下

,也就是说你先fireEvent,然后在registerListener也是可以监听到事件的

有人可能会问为什么会这样设计

因为我希望 A 页面中,在onResume中我们注册事件,在onStop中我们取消监听

如果你要清空你注册事件之前发布的事件可以

 

bus.clearEventTime("事件名", "监听名");

 

 

 

 

问题2解决,只需要在service中发布事件,在你有关的页面,监听事件就行

问题3解决, 先注册一个监听器,事件发布时网络获取用户信息,当用户更新头像后,发布一下事件就行

 

下面是用注解实现

 

   

     @OnEvent(name="事件名",ui=true,onBefore=true)
	public void onEvent2(String p1,String p2){
		dialoger.showToastShort(this, "事件2触发参数1:"+p1+"参数2:"+p2 );
	}

 

注解name参数,事件名,ui是否在ui线程,onBefore=true,可以监听事件监听前的事件

 

当然使用这个注解还需要

 

	@Override
	protected void onResume() {
		super.onResume();
		EventInjectUtil.inject(this);
	}
	@Override
	protected void onStop() {
		super.onStop();
		EventInjectUtil.unInject(this);
	}
你也可以写在onCreate 和finish里

 开源中国地址:http://www.oschina.net/p/dhroid

qq交流群:297593013(欢迎加入)
分享到:
评论

相关推荐

    eventbus-2.1.0-beta-1.jar

    总的来说,EventBus-2.1.0-beta-1.jar 是一个强大的 Android 事件通信库,它通过简化组件间通信,提高了代码的可读性和可维护性。理解并熟练使用 EventBus,可以极大地提升 Android 应用的开发效率和质量。

    EventBus事件总线c#

    【EventBus事件总线c#】是一个用于C#和.NET框架中的事件驱动编程模式的简单实现,它允许组件之间解耦通信。事件总线的概念来源于软件设计模式,它提供了一个中心化的机制,使得应用程序的不同部分可以发布和订阅事件...

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

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

    C#版本EventBus事件总线实例源码_(0610).rar.rar

    这个压缩包“C#版本EventBus事件总线实例源码_(0610).rar.rar”包含了C#实现事件总线模式的一个实例源码,我们可以从中学到如何在C#中应用事件总线。 事件总线的主要思想是将事件发布者与事件订阅者解耦,使得它们...

    EventBus-1.4-source.jar

    EventBus-1.4-source.jar为EventBus的lib的源码包

    C#版本EventBus事件总线实例源码--值得下载

    在这个"**C#版本EventBus事件总线实例源码**"中,我们可以学习如何在C#环境中构建一个简单的事件发布/订阅系统。 事件总线的核心思想是将发布(Publish)、订阅(Subscribe)和事件(Event)三者分离。发布者(Publisher)...

    C#版本EventBus事件总线实例源码

    "C#版本EventBus事件总线实例源码"是关于如何在C#项目中实现事件驱动架构的一个示例。事件总线(EventBus)是这种架构模式的一种实现,它允许不同的组件之间通过发布和订阅事件进行通信,而无需直接耦合。 事件总线的...

    C#版本EventBus事件总线实例源码-2ZV.rar

    这个"C#版本EventBus事件总线实例源码-2ZV.rar"文件很可能是提供了一个C#实现的EventBus框架的源代码示例。下面我们将详细探讨EventBus的概念、工作原理以及如何在C#中实现。 **EventBus概念** EventBus是一种轻量...

    C#版本EventBus事件总线实例源码2019

    【C#版本EventBus事件总线实例源码2019】是一个关于C#编程语言中的事件总线设计模式的应用示例。事件总线是一种松耦合的通信机制,允许不同组件之间通过发布和订阅事件来进行通信,而无需直接相互依赖。在C#中实现...

    .NET版本EventBus事件总线实例源码

    .NET版本的EventBus是一种...".NET版本EventBus事件总线实例源码"提供了一个实际的示例,可以帮助学习和研究如何在C#项目中应用EventBus。对于进一步的学习,你可以分析源码,了解它如何处理事件的发布、订阅和分发。

    C#版本EventBus事件总线实例源码-9s.rar

    总结起来,C#版本的EventBus事件总线实例源码为我们提供了一种在项目中实现解耦和高效通信的方式。通过创建和管理事件发布者、订阅者以及事件总线,我们可以构建出更加灵活、可扩展的软件系统。对于学习和实践C#开发...

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

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

    eventbus-3.0.0-beta1.rar

    EventBus 是一个流行于 Android 开发中的发布/订阅事件总线库,它的主要目标是简化应用程序内部组件之间的通信。在Android应用开发中,组件间的通信通常依赖于接口、广播接收者或者Activity的回调方法,而EventBus...

    Go-EventBus-Go轻量级事件总线兼容异步

    Go-EventBus是一款轻量级的事件总线库,专为Go语言开发,它提供了高效、灵活的事件发布和订阅机制,支持异步处理,能够帮助开发者构建松耦合、可扩展的应用程序。在本文中,我们将深入探讨Go-EventBus的核心特性、...

    C#版本EventBus事件总线实例源码-Lvvp.rar

    在"C#版本EventBus事件总线实例源码-Lvvp.rar"这个压缩包中,包含了实现C# EventBus的一个具体实例,我们可以从以下几个方面来理解这个知识点: 1. **发布/订阅模式**:在发布/订阅模式中,事件发布者(publisher)...

Global site tag (gtag.js) - Google Analytics