Android事件总线分发库的使用EventBus(和Otto一样,只是效率高点)

Event Bus是一个发布 / 订阅的事件总线。

Event Bus模式 — 也被称为Message Bus或者发布者/订阅者(publisher/subscriber)模式 

— 可以让两个组件相互通信,但是他们之间并不相互知晓。

基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,

EventBus可以向不同的线程中发布事件。EventBus支持 Sticky Event。

使用时需要先注册订阅,然后向订阅者分发消息数据即可。

包含4个成分:发布者,订阅者,事件,总线。订阅者可以订阅多个事件,

发送者可以发布任何事件,发布者同时也可以是订阅者。分订阅、注册、发布、取消注册等步骤。

Event Bus的基本用法

       分订阅、注册、发布、取消注册。
       注册:
 
EventBus.getDefault().register(this); 
 
EventBus.getDefault().register(new MyClass()); 
 
//注册:三个参数分别是,消息订阅者(接收者),接收方法名,事件类
  
        EventBus.getDefault().register(this,"setTextA",SetTextAEvent.class);
        
取消注册: 
 
        EventBus.getDefault().unregister(this);
  
  EventBus.getDefault().unregister(new MyClass());


订阅处理数据:
 
public void onEventMainThread{}

        public void onEvent(AnyEventType event) {}

onEventPostThread、onEventBackgroundThread、onEventAsync

发布: 
EventBus.getDefault().postSticky(new SecondActivityEvent("Message From SecondActivity"));
  
  EventBus.getDefault().post(new ChangeImgEvent(1)); 

下面是一个例子:

1导jar包

2核心代码:

一、基本用法

发消息:

EventBus.getDefault().post(new Zhh("消息FourActivity"));

其他页面接收消息

/**
     * 在 onCreate 中注册
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_three);
        EventBus.getDefault().register(this);
    }

    /**
     * 在 onDestroy 中取消注册
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    
    /**
     * 接收消息
     * 注意eventbus3.0的jar包要加@Subscribe
     */
    @Subscribe
    public void  onEvent(Zhh zhh){
        Logger.t("111").d("接收到的消息是"+zhh.getName());
    }

实体类

package com.zhh.android;

/**
 * 实体类
 */

public class Zhh {
    private String name;

    public Zhh(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


}

二、Sticky Event - 粘性事件
        在Android开发中,Sticky事件只指事件消费者在事件发布之后才注册的也能接收到该事件的特殊类型。Android中就有这样的实例,也就是Sticky Broadcast,即粘性广播。正常情况下如果发送者发送了某个广播,而接收者在这个广播发送后才注册自己的Receiver,这时接收者便 无法接收到刚才的广播,为此Android引入了StickyBroadcast,在广播发送结束后会保存刚刚发送的广播(Intent),这样当接收者注册完Receiver 后就可以接收到刚才已经发布的广播。这就使得我们可以预先处理一些事件,让有消费者时再把这些事件投递给消费者。

发消息:

EventBus.getDefault().postSticky("首页消息");

接收消息

/**
     * 在onCreate 注册
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        EventBus.getDefault().register(this);
    }

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

    /**
     * 接收消息
     */
    @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
    public void onEvent(String zifuchuan) {
        TextView textView = findViewById(R.id.textView);
        textView.setText(zifuchuan);
    }

三、线程模式 ThreadMode

消息在那个线程中接收
常用的两个:ThreadMode.MAIN主线程,ThreadMode.ASYNC子线程

在子线程中接收(在注解中标识)

    /**
     * 接收消息
     * 注意eventbus3.0的jar包要加@Subscribe
     */
    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void  onEvent(Zhh zhh){
        Logger.t("111").d("接收到的消息是"+zhh.getName());
    }

在主线程中接收(在注解中标识)

    /**
     * 接收消息
     * 注意eventbus3.0的jar包要加@Subscribe
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void  onEvent(Zhh zhh){
        Logger.t("111").d("接收到的消息是"+zhh.getName());
    }

 

源码下载:

http://download.csdn.net/detail/zhaihaohao1/9563601

EventBus实现fragment之间传递数据

http://download.csdn.net/detail/zhaihaohao1/9563663

参考文章:

https://blog.csdn.net/IO_Field/article/details/52185717

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值