EventBus理解

一、介绍

EventBus出自greenrobot,和之前的GreenDao是同一家,现在最新版本是3.0,。它主要是针对Android优化的发布/订阅 事件总线。主要是代替Intent、Handler、BroadCa在个个组件(Activity、Fragment、Service)之间的传递。

官方文档:http://greenrobot.org/eventbus/

它的流程为:




主要是为了优化发布/订阅时间总线,可以:

1.简化组件之间的通信

2.解耦事件发送者和接受者

3.对activity,fragment和后台线程表现良好

4.避免复杂和容易出错的依赖关系和生命周期问题

5.很快专门针对高性能进行优化

6.代码质量<50k

7.具有传送线程,用户优先级等高级功能


主要角色:

1.Event传递的事件对象

2.Subscriber 事件的订阅者

3.Publisher 事件的发布者

4.ThreadMode 定义函数在何种线程中执行

注:ThreadMode总共有四个

1.Main UI线程

2.BACKGOUND 后台线程

3.POSTING 和发布者处在同一线程

4.ASYNC 异步线程


二、使用

1.导入库

compile 'org.greenrobot:eventbus:3.0.0'



2.定义一个事件对象

public class EventMessage {
    public String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}


3.注册/解除订阅

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

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


4.发布事件

EventMessage e=new EventMessage();
e.setMessage("hello EventBus3.0.0");
EventBus.getDefault().post(e);

5.处理订阅事件

@Subscribe(threadMode=ThreadMode.MAIN)
    public void onEventMessage(EventMessage eventMessage){
        tvEvent.setText(eventMessage.message);
    }

这就是一般是使用流程,其实还有很多使用,比如:

1.类似广播的优先级(priority)

@Subscribe(threadMode=ThreadMode.MAIN,priority = 200)
//在ui线程执行 优先级200
public void onEventMessage(EventMessage eventMessage){ tvEvent.setText(eventMessage.message); }



2.终止事件传递

EventBus.getDefault().cancelEventDelivery(event) ;//优先级高的订阅者可以终止事件往下传递

推荐比较好的博客:

http://blog.csdn.net/o279642707/article/details/70854642


我自己写的一个小demo:


http://download.csdn.net/download/u010074054/9964508


如果有写的不对的或者补充的,希望大家多多指点出来,谢谢!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值