`

EventBus的使用

 
阅读更多

使用EventBus, 主要目的在于实现App组件间通信的解耦.

 

git地址:  https://github.com/greenrobot/EventBus

 

基本使用流程:

1. 编写事件类 

public class AnyTypeEvent {
	
	private String someMsg;
	
	public AnyTypeEvent(String message) {
		this.someMsg = message;
	}

	public String getSomeMsg() {
		return someMsg;
	}

	public void setSomeMsg(String someMsg) {
		this.someMsg = someMsg;
	}
	
}

 2. 注册事件订阅者 

public class EventTestActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.act_event_test);	
		
		EventBus.getDefault().register(this); // 注册当前Activity为订阅者
		// EventBus.getDefault()是一个单例实现的作用域范围为进程的event bus
	}

	@Override
	protected void onDestroy() {		
		EventBus.getDefault().unregister(this); // 注销订阅者
		super.onDestroy();
	}
}

 3. 在订阅者内部实现订阅函数
     订阅函数的名称固定为4种, 不可变. 这是因为EventBus是同通过反射函数名在订阅类中查找订阅函数. 

     注意: 不要使用register(Object subscriber, String methodName, ...)注册自定义名称的订阅函数, 在2.2版本中已经被Deprecated了.
     订阅函数分为 onEvent, onEventMainThread, onEventBackground, onEventAsync.

     订阅函数必须是public, 且形参个数必须只能是1个.(源代码中写死了...)
     4种订阅函数之间存在差别.

...

// Activity中关于AnyTypeEvent的订阅函数实现
	public void onEvent(AnyTypeEvent event){
		Toast.makeText(this, event.getSomeMsg(), Toast.LENGTH_SHORT).show();
	}

...

 4. 发布事件

btnOnEvent = (Button) findViewById(R.id.btn_act_main_on_event);
		btnOnEvent.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// 发布AnyTypeEvent类型的事件
				EventBus.getDefault().post(new AnyTypeEvent("Button-onEvent is clicked."));
			}
		});

 

5 四种订阅函数之间的区别.

    它们之间的区别在于与post()函数相比较, 是在哪个线程运行订阅函数.

    1) onEvent:   

        在哪个线程调用post(), 就在相同的线程执行onEvent().

    2) onEventMainThread:

        无论post()运行于哪个线程, 都在UI线程执行onEventMainThread().

    3) onEventBackground:

        如果post()运行在子线程, 则onEventBackground()也运行于子线程.

        如果post()运行在UI线程, 则启动子线程运行onEventBackground()

    4) onEventAsync:

        无论post()运行于哪个线程, 都启动子线程执行onEventAsync()

    针对性的选择使用订阅函数,可以避免在线程切换时引发的消耗.

    在使用onEvent, onEventMainThread, onEventBackground时, 务必保证在函数内不要去执行耗时操作, 避免其阻塞了UI线程.

 

分享到:
评论

相关推荐

    EventBus使用详解教程,带你学习eventbus。详解Demo

    本教程将深入讲解 EventBus 的使用方法,并通过一个名为 DavidEventBusDemo 的示例项目进行演示。 首先,理解 EventBus 的基本概念是至关重要的。EventBus 使用发布/订阅模式来传递事件。发布者(Publishers)发布...

    Android eventbus使用demo

    **Android EventBus 使用详解** EventBus 是 Android 开发中一个轻量级的消息发布/订阅库,由 GreenRobot 团队开发。它简化了组件间的通信,避免了过于复杂的回调和使用 Intent 进行 Activity、Fragment 之间的事件...

    《EventBus使用详解(二)——EventBus使用进阶》对应源码

    博客《EventBus使用详解(二)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40787203

    安卓 EventBus 使用示例 eventbus-3.1.1.jar

    安卓 EventBus 使用示例,开发工具为eclipse+ADT,EventBus可简化安卓各个组件,线程之间的通信 相关博客 http://blog.csdn.net/qq_34763699/article/details/79467327

    Eventbus的详细使用

    1. **创建事件类**:EventBus 使用 Java 对象作为事件,这些对象通常定义为不可变的 `public final` 类。例如,创建一个简单的 `HelloEvent`: ```java public class HelloEvent { public String message; } ``...

    博客《 EventBus使用详解(一)——初步使用EventBus》对应源码

    博客《 EventBus使用详解(一)——初步使用EventBus》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40660137

    Node.js-基于greenrobot的eventBus使用RxJava实现的事件总线

    在给定的标题“Node.js-基于greenrobot的eventBus使用RxJava实现的事件总线”中,我们可以推断这是一个关于在Android应用中使用EventBus的实践,特别地,是greenrobot的EventBus与RxJava的结合使用。 Greenrobot的...

    EventBus使用教程Demo

    **EventBus 使用教程详解** EventBus 是一个 Android 开发中常用的发布/订阅事件总线库,它简化了组件之间的通信,使得组件间解耦。在本文中,我们将深入探讨 EventBus 的核心概念、安装、基本使用、高级用法以及...

    EventBus使用记录demo

    EventBus 是一个在 Android 开发中广泛使用的发布/订阅事件总线库,它简化了组件间的通信,使得组件之间的耦合度降低。本项目是一个 EventBus 使用的实例演示,通过一个名为 "Fragment2Aty2Frag_EventBusWay" 的文件...

    《EventBus使用详解(一)——初步使用EventBus》对应源码

    博客《EventBus使用详解(一)——EventBus使用进阶》对应源码,博客地址:http://blog.csdn.net/wangyi891223/article/details/49885999

    EventBus使用例子

    下面将详细介绍 EventBus 的使用方法。 **一、集成 EventBus** 首先,在你的项目中添加 EventBus 的依赖。如果你使用的是 Gradle,可以在 `build.gradle` 文件中添加以下依赖: ```groovy dependencies { ...

    Reface.EventBus 使用简单示例源文档

    Reface.EventBus 使用简单示例源文档 1、包含消息创建。 2、消息订阅。 3、消息发布等操作。

    eventBus使用Demo

    - 为了确保EventBus能正确地处理事件,订阅者类必须实现`java.lang.Object`类,这是因为EventBus使用反射来找到订阅者方法。 这就是一个基本的EventBus使用Demo,它展示了如何发布和订阅事件。在实际开发中,可以...

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

    本文将深入探讨如何使用EventBus,特别是其粘性事件(postSticky)功能。 首先,理解EventBus的基本用法是至关重要的。EventBus通过事件类(Event Object)来传递数据,这些事件类通常定义为公共静态类,并包含必要...

    EventBus使用教程

    ### EventBus使用教程 #### 一、简介 EventBus是一个轻量级的消息传递框架,它能够帮助开发者在Android应用中实现不同组件之间的解耦,并简化组件间的通信机制。相比于传统的Intent方式,EventBus提供了更为简洁...

    EventBus使用Demo

    **EventBus 使用 Demo** EventBus 是一个在 Android 开发中常用的发布/订阅事件总线库,它简化了组件之间的通信,避免了复杂的依赖关系和生命周期管理。本篇将通过一个 Demo 来详细介绍 EventBus 的基本使用方法和...

    EventBus的使用Demo

    在 Android 框架之路系列教程中,我们将会深入探讨如何有效地使用 EventBus。 在 Android 开发中,Activity、Fragment、Service 之间的通信通常采用回调、Intent 或者接口等方式,但这些方法有时会变得复杂,特别是...

    SpringBoot+EventBus使用教程示例代码

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

    EventBus使用demo,很详细

    本示例将深入探讨如何使用EventBus及其在实际项目中的应用。 首先,我们来了解一下EventBus的基本概念。EventBus是基于发布/订阅模式的事件系统,它通过简化发布事件和订阅事件的方法,使得组件之间的通信变得更加...

    EventBus使用简单示例

    EventBus 是一个轻量级的事件总线库,专为 Android 设计,它简化了应用程序组件之间的通信。在传统的 Android 开发中,我们通常使用...通过正确地使用 EventBus,开发者可以构建更加模块化、解耦的 Android 应用程序。

Global site tag (gtag.js) - Google Analytics