EventBus使用

EventBus主要用于组件之间的通信,由GreenRobot发布

使用

1) implementation 'org.greenrobot:eventbus:3.1.1'

2)工具类

public class EventBusUtils {

    public static void register(Object subcriber) {
        EventBus.getDefault().register(subcriber);
    }

    public static void unregister(Object subcriber) {
        EventBus.getDefault().unregister(subcriber);
    }

    /**
     * 发送事件
     * @param info
     */
    public static void sendEvent(BaseEventInfo info) { EventBus.getDefault().post(info); }

    /**
     * 发送粘性事件
     * @param info
     */
    public static void sendStrickyEvent(BaseEventInfo info) { EventBus.getDefault().postSticky(info); }

    /**
     * 终止事件的分发
     * @param event
     */
    public static void cancelEventIntercept(Object event) { EventBus.getDefault().cancelEventDelivery(event);}

}

接收事件:

@Subscribe(threadMode = ThreadMode.POSTING , sticky = true , priority = 20)
public void onEvent(EventTest event) {
    System.out.println("receiver event");
}

threadMode有四个值

POSTING:事件发送和接收在同一线程

MAIN:事件接收在主线程

BACKGROUND:事件接收在后台线程,如果发布线程在主线程,接收事件会开一个后台线程,如果发布线程在子线程,那么接收事件会在改线程内处理

ASYNC:无论事件发布在哪个线程,接收事件都会新开一个线程处理事件

sticky:是否粘性,如果赋值为true ,那么在事件发送之前未订阅,事件发布之后再订阅,仍然可以接收到该事件,

如果要接收到粘性事件除了需要在接收方法的注解上给sticky赋值为true,还需要在发送事件时使用sendSticky().

priority优先级:可以给接收方法赋予不同的优先级,根据优先级的不同,接收到事件的顺序不同,优先级越高,越快接收到事件

先接收到事件的方法可以通过cancelEventDelivery()让事件停止分发这样低优先级的方法就接收不到事件了.

注:

1)只有给ThredMode赋予相同的值的情况下,priority才是有效的.

2)只有ThreadMode的值是POSTING时,cancelEventDelivery()才是有效的.

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值