Eventbus学习笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_40420578/article/details/100213239

EventBus   https://github.com/greenrobot/EventBus

手动敲代码实现一下eventbus的注册事件、发布消息、接收消息、注销事件订阅,有助于理解

下面以loginActivity(注册事件、接收消息、注销事件)、PostMessageActivity(发布消息)为例,按顺序进行讲解

一.在build.gradle引入:版本号可以在github找最新的

implementation  'org.greenrobot:eventbus:3.0.0'

二:自定义消息事件

public class MessageEvent {
    private int message;
    private Object obj;

    public MessageEvent(int message) {
        this.message = message;
    }

    public MessageEvent(Object obj) {
        this.obj = obj;
    }

    public MessageEvent(int message, Object obj) {
        this.message = message;
        this.obj = obj;
    }

    public int getMessage() {
        return message;
    }

    public void setMessage(int message) {
        this.message = message;
    }

    public Object getObj() {
        return obj;
    }

    public void setObj(Object obj) {
        this.obj = obj;
    }
}

三.loginActivity中:注册事件

切记,在未注销事件订阅情况下只能注册一次,onDestroy里进行注销,后面会讲

EventBus.getDefault().register(this);//注册事件,切记,在未注销情况下只能注册一次,onDestroy里进行注销,后面会将

四.PostMessageActivity中(loginActivity已“注册事件”后跳转到PostMessageActivity):发送消息(发送后finishActivity当前activity)

mBinding.edPostMessage.getText().toString()是获取界面输入框内容

EventBus.getDefault().post(new MessageEvent(mBinding.edPostMessage.getText().toString()));

五.loginActivity中:接收消息(把三发送的消息显示在文本上进行验证)

   @Subscribe(threadMode = ThreadMode.MAIN)
    public void onGetMessage(MessageEvent message) {
        mBinding.tvLoginEventBus.setText("EventBus发送的消息是:" + message.getObj());
    }

六.loginActivity的onDestroy中(一般放在onDestroy,也可以手动注销):注销事件订阅

  @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

上面三四顺序调换一下,即先发布消息再注册,就会接收不到消息了

粘性事件:解决发布了消息再订阅,收不到消息的问题(其它的顺序操作一样)

三.PostMessageActivity:发布粘性事件 (用postSticky)

EventBus.getDefault().postSticky(new MessageEvent(mBinding.edPostSticky.getText().toString()));

四.loginActivity:注册(PostMessageActivity发布粘性消息后,才进行注册)

EventBus.getDefault().register(this);//注册事件,切记,在未注销情况下只能注册一次,onDestroy里进行注销,后面会将

五. loginActivity:接收粘性消息(注意onGetStickyEvent和注解

    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void onGetStickyEvent(MessageEvent message) {
        mBinding.tvLoginEventBusSticky.setText("EventBus粘性事件:" + message.getObj());
    }

猜你喜欢

转载自blog.csdn.net/weixin_40420578/article/details/100213239