EventBus的demo使用和例子

订阅发布模式—EventBus和RxJava

EventBus

  • EventBus比较适合仅仅当做组件间的通讯工具使用,主要用来传递消息。
  • 使用EventBus可以避免搞出一大推的interface
  • git地址:https://github.com/greenrobot/EventBus/
  • *

  • 首先需要加载jar包,在build.gradle中添加这么句:
compile 'org.greenrobot:eventbus:3.0.0'
  • 在activity中注册对象,activity消失前需要关闭注册
 //注册eventBus
    @Override
    protected void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    //取消注册
    @Override
    protected void onStop() {
        super.onStop();
        EventBus.getDefault().unregister(this);
    }
  • 自定义一个实体类
/**
 * 自定义类
 */
public class MessageEvent {

    private String msg;

    public String getMsg() {
        return msg;
    }

    public MessageEvent(String msg) {
        this.msg = msg;
    }
}
  • EventBus即是通过自定义的类找到传递订阅的对象,将消息发生给对方。evevt对象即是我们自定义的类的对象,再此处如果有消息传递过来,便可以接受到传递过来的消息。
 @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMainThread(MessageEvent event) {

        if (event.getMsg() != null) {
            System.out.println("onEventMainThread:"+event.getMsg()+" "+Thread.currentThread().getName());
            textView.setText(event.getMsg());
        }else {
            System.out.println("event:"+event);
        }
    }
  • 通过post类型数据过去,就可以将数据传递出去。
EventBus.getDefault().post(new MessageEvent(""))
  • EventBus包含4个ThreadMode
    ThreadMode.POSTING、ThreadMode.MAIN、ThreadMode.BACKGROUND、ThreadMode.ASYNC
  /**
     * 在后台线程中执行,如果当前线程是子线程,则会在当前线程执行,如果当前线程是主线程,则会创建一个新的子线程来执行
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.BACKGROUND)
    public void  onEventBackgroundThread(MessageEvent event){
        System.out.println("onEventBackgroundThread::"+" "+Thread.currentThread().getName());
    }

    /**
     * 创建一个异步线程来执行
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.ASYNC)
    public void onEventAsync(MessageEvent event){
        System.out.println("onEventAsync::"+" "+Thread.currentThread().getName());
    }

    /**
     * 在主线程中运行
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEventMain(MessageEvent event){
        System.out.println("onEventMain::"+" "+Thread.currentThread().getName());
    }

    /**
     *默认的线程模式,在当前线程下运行。如果当前线程是子线程则在子线程中,当前线程是主线程,则在主线程中执行。
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.POSTING)
    public void onEventPosting(MessageEvent event){
        System.out.println("onEventPosting::"+" "+Thread.currentThread().getName());
    }
  • 执行结果附图:

这里写图片描述

这里写图片描述

这里写图片描述

下一篇会讲述下更加神奇的RxJava.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值