在SDK中使用EventBus注意的地方

EventBus这个框架是用来消息分发的,可以解除耦合,使代码更加灵活。

平时使用EventBus的代码如下:

EventBus.getDefault().register(this);

EventBus.getDefault().post("this is a message");

EventBus.getDefault().unregister(this);

这个代码里面的EventBus.getDefault()很重要。如果你在自己的app中这么用,当然没关系,getDefault这个方法会返回一个默认的EventBus,你可以指定event在哪个EventBus上发送,一般APP可以用一个EventBus就够了,那调用getDefault也就够了,如果需求较多的话,可以考虑多个EventBus。不同的消息在不同的总线上发,各个消息总线互不干扰。

但是如果在SDK上,不建议使用getDefault,如果依赖SDK的外部工程也是直接调用了getDefault的话,那么SDK内部发出的消息,APP也可能会接收到该消息,当然有些消息可能是比较机密隐私的,不希望外部接收到,尤其是发送基本类型的事件,例如String,int等,如果app也注册了相同的事件,那么app也将收到该消息,对于一些对安全要求比较高的SDK,还是要使用自己单独的EventBus。

public class EventBusUtil {

    private static EventBus busSingleton;

    public static EventBus getSingleton() {
        if (busSingleton == null) {
            synchronized (EventBusUtil.class) {
                if (busSingleton == null) {
                    busSingleton = new EventBus();
                }
            }
        }
        return busSingleton;
    }

    public static void post(Object event) {
        if (event instanceof OutsideEvent) {
            EventBus.getDefault().post(event);
        } else {
            getSingleton().post(event);
        }
    }

}

代码中OutsideEvent就是sdk对app提供的事件。如果app调用SDK的接口,回调可以使用EventBus,那么就要定义发给app的事件。发给app的事件还是发到getDefault这个总线上,因为app很可能就是使用default这个总线,当然在接入文档中要说明。

另外如果自定义Event的话,最好Event之间 不要搞继承。如果AEvent继承自BEvent,那么当发出AEvent的话,监听BEvent的人也会监听到,可能会出错,这个要注意,当然如果你的需求就是要这样,那也可以。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值