EventBus学习笔记

一、EventBus的使用
1.自定义消息类型,也就是你要传输的消息体

public class MessageEvent{
    private String message;
    public  MessageEvent(String message){
        this.message=message;
    }
    public String getMessage() {
        return message;
    }
 
    public void setMessage(String message) {
        this.message = message;
    }
}

2.在Activity或者Fragment里面注册事件

EventBus.getDefault().register(this);

3.在你需要的地方发送事件

EventBus.getDefault().post(messageEvent);

4.Activity或者Fragment处理事件,方法名称可以自定义,但是必须有@Subscribe注解,注解参数可以有3个,threadMode(在哪个线程回调这个方法) 、sticky(是否为粘性事件)、priority(事件接收的优先级)

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessage(MessageEvent messageEvent) {
    ...
}

5.在Activity或者Fragment里面注销事件

 if(EventBus.getDefault().isRegistered(this)) {
       EventBus.getDefault().unregister(this);
 }

二、EventBus原理浅析
1.注册
(1).注册流程是通过反射,找到Activity或者Fragment中所有的注册方法,然后包装成SubscriberMethod存到List中
(2).根据该订阅者的所有订阅的事件类型,将订阅者存入到每个以 事件类型为key 以所有订阅者为values的map集合中
(3).然后将订阅事件添加到以订阅者为key 以订阅者所有订阅事件为values的map集合中
2.发送消息
(1)发送消息的过程就是去上述的Map中取出所有订阅事件,然后逐一发送。如果是sticky事件,先判断下是否有注册,如果没有注册,则存起来,待下次该sticky事件注册的时候,会来这里查,如果有未发出去的sticky,则会直接发送。
EventBus发送消息并没有定向发送,而是想所有订阅者发送,所以需要通过自定义消息体来区分当前消息需不需要处理。
3.注销
(1)就是清空当前订阅者相关的map

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值