初探EventBus3

本文介绍了Android端的EventBus3消息总线,探讨了它的基本原理和应用场景,包括发布/订阅模式、线程模式的选择及如何替代传统通信方式。

导读:

继续提升自己技术吧,今天给大家带来的是EventBus3的初探学习.

EventBus简介:

EventBus 是一款针对Android端优化的发布/订阅消息总线,它简化了应用程序内各组件间、组件与后台线程间的通信.其主要功能是用来替代传统的Intent、Handler、BroadCast,在Fragment、Activity、Service以及线程之间来传递消息.避免复杂和易出错的依赖和生命周期问题

EventBus GitHub链接

EventBus框架流程图:

这里写图片描述

  1. 根据图片可见框架是观察者设计模式设计的
  2. Publisher 是发布者,通过 post()方法将消息事件Event发布到事件总线
  3. EventBus 是事件总线,遍历所有已经注册事件的订阅者们,找到里边的onEvent等4个方法,分发Event
  4. Subscriber是订阅者,收到事件总线发下来的消息.即onEvent方法被执行.注意参数类型必须和发布者发布的参数一致.

EventBus使用:

一. 添加依赖:

//AS的道友,在Gradle
compile 'org.greenrobot:eventbus:3.0.0'

//eclipse的把项目下载下来,EventBus为项目源码,自行打包成jar包或者Library库,这里就不作说明了

二. 定义事件bean类(直接传不定义也行)


public static class MessageEvent { 

/* Additional fields if needed */ 

}

三. 定义订阅者,注意要在生命周期方法注册/反注册EventBus


//这里的onMessageEvent可以自定义名字,注意加上上面的注解

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {

/* Do something */

};

------------------分割线--------------------

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

四. 在要发送事件的定义Post


EventBus.getDefault().post(new MessageEvent());

简单介绍下EventBus中的四种ThreadMode

  • POSTING

    默认模式,事件在哪个线程Post出来,处理函数就在哪个线程中运行(这个模式需要避免主线程处理耗时操作,防止ANR)

  • MAIN

    事件的处理函数会在UI线程中执行,同理不能执行耗时操作,防止ANR

  • BACKGROUND

    如果Post不是在主线程,那么处理函数会直接在发布事件的线程中执行,如果在Post在主线程,那么处理函数会在新的线程中运行,即–>不管Post在哪个线程,处理函数不能在UI线程中执行

  • ASYNC

    无论Post在哪个线程,处理函数都会通过线程池新建子线程执行,处理函数不能在UI线程中操作,这个模式一般用来执行耗时操作

总结:

这篇文章只是小试牛刀,后续补上使用Demo,以及源码分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值