EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。
在EventBus中,使用约定来指定事件订阅者以简化使用。即所有事件订阅都都是以onEvent开头的函数,具体来说,函数的名字是onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync这四个,这个和ThreadMode有关,有以下四个ThreadMode:
1.PostThread:事件的处理在和事件的发送在相同的进程,所以事件处理时间不应太长,不然影响事件的发送线程,而这个线程可能是UI线程。对应的函数名是onEvent。
2.MainThread: 事件的处理会在UI线程中执行。事件处理时间不能太长,这个不用说的,长了会ANR的,对应的函数名是onEventMainThread。
3.BackgroundThread:事件的处理会在一个后台线程中执行,对应的函数名是onEventBackgroundThread,虽然名字是BackgroundThread,事件处理是在后台线程,但事件处理时间还是不应该太长,因为如果发送事件的线程是后台线程,会直接执行事件,如果当前线程是UI线程,事件会被加到一个队列中,由一个线程依次处理这些事件,如果某个事件处理时间太长,会阻塞后面的事件的派发或处理。
4.Async:事件处理会在单独的线程中执行,主要用于在后台线程中执行耗时操作,每个事件会开启一个线程(有线程池),但最好限制线程的数目。
根据事件订阅都函数名称的不同,会使用不同的ThreadMode,比如果在后台线程加载了数据想在UI线程显示,订阅者只需把函数命名为onEventMainThread。
可以在任意线程任意位置发送事件,直接调用EventBus的post(Object)方法,可以自己实例化EventBus对象,但一般使用默认的单例就好了:EventBus.getDefault(),根据post函数参数的类型,会自动调用订阅相应类型事件的函数。
EventBus的基本使用步骤:
1.定义事件类型:
这个事件类型可以是任意类型的对象
public class ResultBeen {
private int result;
private String response;
public ResultBeen(String response) {
this.response =response;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public String getResponse() {
return response;
}
@Override
public String toString() {
return response;
}
}
2.定义事件处理方法:
public void onEventMainThread(ResultBeen event) {
this.tv_result.setText(event.getResponse());
}
3.注册订阅者
通过EventBus.getDefault().register方法可以向EventBus注册来订阅事件
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
4.发送事件:
直接调用EventBus.getDefault().post(Event)就可以发送事件,根据Event的类型就可以发送到相应事件的订阅者。
public void fetchBaidu(Context context) {
RequestQueue mRequestQueue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://www.baidu.com", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
EventBus.getDefault().post(new ResultBeen(response));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
EventBus.getDefault().post(new ResultBeen(error.getMessage()));
}
});
mRequestQueue.add(stringRequest);
}
5.取消注册:
public void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
分享到:
相关推荐
EventBus 是一个轻量级的事件总线库,它用于 Android 应用程序中的组件间解耦通信。在 Android 开发中,它提供了一种替代传统回调或接口传递消息的方法,使得不同组件间的通信变得更加简单和灵活。EventBus 3.0 版本...
【Android 自己实现组件间通信框架EventBus】 EventBus 是一个流行且轻量级的 Android 组件间通信库,它简化了应用程序中的事件发布/订阅机制。传统的 Android 通信方式,如 Intent、BroadcastReceiver 或者回调...
**Node.js-Eventbus3.0简单使用适合初学者使用** 在Node.js开发过程中,有时候我们需要在不同的模块之间传递事件,实现解耦合和高效通信。这就是EventBus(事件总线)的概念,它模仿了Android中的EventBus库,提供...
在Android开发中,EventBus是一个轻量级的事件发布/订阅框架,它简化了应用程序组件之间的通信。相较于传统的BroadcastReceiver,EventBus提供了更加灵活、高效和低耦合的事件传递方式。本文将深入探讨如何使用...
在本文中,我们将深入探讨如何在SpringBoot应用中使用EventBus,这是一个基于Guava库的事件总线系统。EventBus的引入使得松耦合的组件间通信变得更加简单和高效。让我们一起通过步骤来理解这个“SpringBoot+EventBus...
在这种情况下,`EventBus`作为一个轻量级的发布/订阅事件总线,可以作为Intent的一个有效替代方案,特别是在处理复杂数据结构和跨组件通信时。 `EventBus`由GreenRobot团队开发,它简化了Android组件间的通信,使得...
**EventBus 概述** EventBus 是一个发布/订阅事件总线库,它简化了 Android 应用程序内的组件通信。传统的组件间通信方式,如使用 Handler 或接口回调,往往导致代码复杂度增加,可维护性降低。EventBus 的引入为...
EventBus 是一个流行的 Android 库,它简化了应用程序中的事件发布和订阅机制。这个库是由 GreenRobot 开发的,旨在替代传统的回调或者广播接收器,为开发者提供了一种更轻量级、更灵活的方式来处理组件间的通信。...
EventBus 是一个流行的消息总线库,用于简化 Android 应用中的组件通信。它通过发布/订阅模式使得组件之间的交互更加灵活,降低了组件间的耦合度。在 Android 框架之路系列教程中,我们将会深入探讨如何有效地使用 ...
**EventBus详解** EventBus是一款轻量级的事件总线库,它简化了Android应用中的组件间通信。在传统的Android开发中,我们通常使用接口回调、BroadcastReceiver或静态内部类来实现组件间的通信,但这些方式往往使得...
EventBus 是一个轻量级的事件总线库,它在Android开发中被广泛使用,用于组件之间的解耦通信。这个库使得应用程序中的不同组件(如Activity、Fragment、Service等)可以方便地通过发布和订阅事件来进行通信,而无需...
EventBus 是一个轻量级的事件总线库,它简化了 Android 应用中的组件通信。这个库由 Greenrobot 开发,它通过发布/订阅模式让组件之间能够解耦合地进行通信,避免了大量的回调函数或者冗余的接口实现。在 "EventBus...
EventBus 是一个流行的消息总线库,专门为 Android 平台设计,用于简化应用程序中的事件通信。这个库由 Greenrobot 开发,它提供了一个发布/订阅模式的事件传递机制,使得组件之间的解耦变得简单而高效。标题中的 ...
EventBus 是一个轻量级的事件总线库,它简化了Android应用内的组件通信。在Android开发中,组件之间的通信通常依赖于回调、接口或者Intent等机制,但这些方式有时会变得复杂,尤其是在多模块、多层级交互时。...
**EventBus 3 使用记录与实战** EventBus 是 Android 开发中一个轻量级的发布/订阅事件总线,它简化了组件之间的通信,避免了因过度依赖于 Activity 和 Fragment 的回调导致的复杂性。本篇文章将深入探讨 EventBus ...
EventBus 是一个流行于 Android 开发中的发布/订阅事件总线库,由 GreenRobot 团队开发。这个库简化了组件间的通信,使得应用程序的组件(如 Activities, Fragments, Services)无需直接耦合就可以相互通信。在 ...
EventBus 是一个 Android 开发中的轻量级事件总线库,它简化了应用程序组件之间的通信。这个"EventBus相关小案例"可能包含了如何在实际项目中应用 EventBus 的示例代码。下面,我们将深入探讨 EventBus 的核心概念、...
在软件开发中,事件总线(EventBus)是一种设计模式,用于在组件之间解耦通信,使得各个组件可以独立地发布和订阅事件,而无需直接引用对方。C#作为.NET框架的主要编程语言,同样支持实现事件总线的概念。下面将详细...
EventBus 是一个在 Android 开发中广泛使用的发布/订阅事件总线库,它简化了组件间的通信,替代了传统的基于回调或意图(Intent)的通信方式。EventBus 3.0 版本是其稳定且功能强大的一个版本,提供了一些优化和改进...
参考文档:电梯直达 EventBusUtils //订阅者回调签名 typedef void EventCallback(arg);... static EventBus _singleton = new EventBus._internal(); /// 工厂构造函数 factory EventBus() => _singleton; /// 保