`
scarlettli
  • 浏览: 57525 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

EventBus

阅读更多
       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 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