EventBus简单使用

2018-09-24  本文已影响0人  Active_Loser

一、简单介绍

EventBus是一种能够简化各组件间的通信,通过解耦发布者和订阅者简化Android事件传递用以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。

优势:

概念

线程模型:

二、简单使用

1、添加依赖,EventBus网址。

implementation 'org.greenrobot:eventbus:3.1.1'

2、构造事件(Event)对象(发送消息类)。

/**
 * Created by Active_Loser on 2018/9/20
 * Content:简单的提示事件
 */
public class ToastEvent {
    private String content;

    public ToastEvent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

3、注册/解除事件订阅

在onCreate()中通过register(this)来表示该订阅者进行了订阅

EventBus.getDefault().register(this);

使用注解@Subscribe,处理相关操作

注意:

若在非UI线程,需要使用@Subscribe(threadMode = ThreadMode.MainThread)更新UI

设置优先级:@Subscribe(priority = 100)

@Subscribe    
public void onToastEvent(ToastEvent event){                 Toast.makeText(MainActivity.this,event.getContent(),Toast.LENGTH_SHORT).show();    
}

在onDestory()方法中进行解除订阅。

EventBus.getDefault().unregister(this);

4、发送事件,发送消息

EventBus.getDefault().post(new ToastEvent("我是一个toast!"));

三、粘性事件

订阅在发布事件之后,但同样可以收到事件。订阅/解除订阅和普通事件一样,但是处理订阅的方法有所不同,需要注解中添加sticky = true。

@Subscribe(sticky = true)
    public void onToastEvent(ToastEvent event){
        Toast.makeText(MainActivity.this,event.getContent(),Toast.LENGTH_SHORT).show();
        EventBus.getDefault().cancelEventDelivery(event);
    }
}

当设置了sticky = true,在ToastEvent 的事件发布后,进行注册。依然能够接收到之前发布的事件。

EventBus.getDefault().postSticky(new ToastEvent("Toast,发个提示,祝大家新年快乐!"));

移除

EventBus.getDefault().removeStickyEvent(ToastEvent.class);
//移除所有粘性事件
EventBus.getDefault().removeAllStickyEvents();
上一篇下一篇

猜你喜欢

热点阅读