Android EventBus框架的使用

EventBus框架

EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。

EventBus是一种基于观察者模式的框架,类似的框架还有RXJava,Agera之类的,总之都是一类的东西,学会一个的话很容易触类旁通.

 添加依赖

 compile 'de.greenrobot:eventbus:3.0.0-beta1'

注册观察者

在Context 中注册观察者

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 将此Context注册给EventBus
    // 成为观察者
    EventBus.getDefault().register(this);
}

取消注册

@Override
protected void onDestroy() {
    super.onDestroy();
    // 取消注册
    EventBus.getDefault().unregister(this);
}

EventBus.getDefault()是获取该EventBus的对象,该对象为单例

添加事件,任何Object对象都可以被描述为事件

/**
 * Created by yangtianrui on 16-7-18.
 * 这是一个可以抛出的事件
 * <p/>
 * 所有可以实例化成Object的类都是一个事件
 */
public class DriverEvent {
    public String info;


    public DriverEvent(String info) {
        this.info = info;
    }

    public DriverEvent() {
    }

}

对事件的处理

/**
  * 此处通过注解,编写事件处理函数
  *
  * @param driverEvent
  */
 @Subscribe(threadMode = ThreadMode.PostThread, priority = 0, sticky = true)
 public void handleEvent(DriverEvent driverEvent) {
     Toast.makeText(this, driverEvent.info, Toast.LENGTH_SHORT).show();
 }

 public void btn_post_event(View view) {
     EventBus.getDefault().post(new DriverEvent("OK"));
 }

threadMode表示线程模型,常见的线程模型有四种:分别是PostThread(默认)、MainThread、BackgroundThread与Async。

  1. PostThread:如果使用事件处理函数指定了线程模型为PostThread,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为PostThread的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。

  2. MainThread:如果使用事件处理函数指定了线程模型为MainThread,那么不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。

  3. BackgroundThread:如果使用事件处理函数指定了线程模型为BackgroundThread,那么如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。

  4. Async:如果使用事件处理函数指定了线程模型为Async,那么无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行。同样,此事件处理函数中禁止进行UI更新操作。

发送事件

public void btn_post_event(View view) {
     EventBus.getDefault().post(new DriverEvent("OK"));
 }

使用post方法发送事件后,所有注册观察者的对象(使用注解处理事件)都可以收到事件推送,在注解方法中实现对事件的处理.

发送粘性事件

粘性事件: 就是在发送事件之后再订阅该事件也能收到该事件,跟黏性广播类似。

EventBus.getDefault().postSticky(new MessageEvent("test"));

粘性事件的处理函数:

@Subscribe(sticky = true)
public void XXX(MessageEvent messageEvent) {
    ......
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Eventbus是一种轻量级的事件发布/订阅框架,它可以帮助开发者在不同组件之间进行通信,而不需要显式地进行接口回调或者广播。使用Eventbus,开发者只需要定义事件类和订阅者类,然后在需要通信的地方发布事件即可。Eventbus会自动将事件分发给所有订阅者,并在主线程或者后台线程中执行订阅者的回调方法。这样,开发者就可以轻松地实现组件之间的解耦和通信。 ### 回答2: Android Eventbus是一个用于Android应用程序中的事件发布/订阅框架。它可以帮助开发者在代码之间交换信息,这样可以让我们更加灵活地设计Android应用程序。Eventbus包含:生产者,消费者、Event、事件发布者和订阅者。当一个事件被发布后,Eventbus会将它发送给所有与该事件相关的订阅者,这些订阅者需要注册到Eventbus之中才能接收到事件。下面是Android Eventbus的基本使用方法: 首先,下载Eventbus库,并在项目中添加Eventbus的依赖库: ``` compile 'org.greenrobot:eventbus:3.0.0' ``` 接下来定义一个Event,例如: ``` public class messageEvent { public final String message; public messageEvent(String message) { this.message = message; } } ``` 然后,在需要发布事件的地方,使用Eventbus的post方法: ``` EventBus.getDefault().post(new messageEvent(message)); ``` 最后,在需要接收事件的地方,使用Eventbus的subscribe方法: ``` @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(messageEvent event) { //处理事件 } ``` 需要注意的是,我们在订阅事件的时候,需要指定事件在哪个线程中执行以及事件的优先级。 Android Eventbus使用与广播接收器非常相似,但是它提供的更加灵活和方便的方式来进行事件交流。在Android应用程序的开发中,快速的消息传递是非常重要的,Eventbus可以很好的解决这一需求。 ### 回答3: EventBus是一个开源的事件总线库,用于在应用程序中简化通信和交互。它实现了发布者-订阅者模式,提供了一种简便的方式来实现不同组件之间的沟通和数据交互。 在使用EventBus之前,需要首先引入EventBus库,并创建一个自定义事件类,用来发送和接收特定类型的事件。创建自定义事件类时需要继承EventBus的父类,并定义所需的属性和方法。 接下来,需要注册和取消注册EventBus。注册EventBus时,需要在onCreate()方法中调用EventBus的register方法,并在onDestroy()方法中调用unregister方法。这样做是为了避免内存泄漏和性能问题。 发送事件时,需要使用EventBus的post方法来发送自定义事件。当事件被发送时,订阅者会自动接收到该事件并执行相应的方法。 订阅者需要在方法上添加@Subscribe注释,并定义事件的响应方法。当事件被发送时,订阅者会自动接收到该事件并执行相应的方法。方法参数应该与事件类的属性类型相匹配,这样才能正确处理事件。 除了基本的事件发送和订阅,EventBus还提供了一些高级功能,例如粘性事件、优先级事件、事件过滤等。这些功能可以根据情况进行选择或使用,以满足应用程序的特定需求。 总的来说,EventBus使组件之间的通信和交互变得更加轻松和高效。它可以帮助开发者快速实现各种事件类型的传递和处理,并提高应用程序的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值