美文网首页
Android EventBus的使用

Android EventBus的使用

作者: mage1160 | 来源:发表于2021-11-02 10:26 被阅读0次

    一、发送普通消息

    第一步:

    添加依赖:implementation 'org.greenrobot:eventbus:3.1.1'

    第二步:

    注册监听: EventBus.getDefault().register(this);

    第三步:

    反注册监听:EventBus.getDefault().register(this);

    第四步:

    构造发送消息类,并发送消息

    第五步:

    接收消息(四种)

    第一种:主线程处理: ThreadMode.MAIN

            首先去判断当前如果是UI线程,则直接调用;否则: mainThreadPoster.enqueue(subscription, event);把当前的方法加入到队列,然后直接通过handler去发送一个消息,在handler的handleMessage中,去执行我们的方法。说白了就是通过Handler去发送消息,然后执行的。

    第二种:后台处理,也就是子线程处理,不可并发ThreadMode.BACKGROUND

            如果当前非UI线程,则直接调用;如果是UI线程,则将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用

    executorService = Executors.newCachedThreadPool();。

    第三种:后台处理,可以并发执行, ThreadMode.ASYNC

            将任务加入到后台的一个队列,最终由Eventbus中的一个线程池去调用;线程池与BackgroundThread用的是同一个。

    第四种:发送和接收在同一个线程中处理。ThreadMode.POSTING

            对应表示该方法和消息发送发是在同一个线程中执行。

    对应的代码:EventActivity跳转到SendMessageActivity页面, SendMessageActivity往EventActivity页面发送消息

    EventActivity

    onCreate的方法里 进行注册

    EventBus.getDefault().register(EventActivity.this);

    onDestroy的方法里 进行反注册

    EventBus.getDefault().unregister(EventActivity.this);

    创建发送消息的类

    public class MyMessage {

        private Stringmessage;

        public String getMessage() {

            return message;

        }

        public void setMessage(String message) {

            this.message = message;

        }

    }

    EventActivity 中接收消息

    //事件处理:方法名自定义,参数必须为当前消息的类型

    //threadMode有四种类型(MAIN、POSTING、BACKGROUND、AYSNC)

    @Subscribe(threadMode = ThreadMode.MAIN)

    public void eventBusMessage(MyMessage myMessage){

            text.setText(myMessage.getMessage());

    }

    SendMessageActivity发送消息

    MyMessage myMessage =new MyMessage();

    myMessage.setMessage("EventBus发送的消息");

    EventBus.getDefault().post(myMessage);

    finish();

    二、发送粘性消息

    第一步:

    添加依赖:implementation 'org.greenrobot:eventbus:3.1.1'

    第二步:

    构造发送消息类

    第三步:

    发布消息

    第四步:

    接收消息

    第五步:

    注册监听: EventBus.getDefault().register(this);

    解注册监听:EventBus.getDefault().unregister(this);

    对应的代码:EventStickyActivity跳转到MessageActivity页面, EventStickyActivity往MessageActivity页面发送消息

    EventStickyActivity页面:

    跳转时发送消息

    MyMessage myMessage =new MyMessage();

    myMessage.setMessage("我是粘性事件");

    EventBus.getDefault().postSticky(myMessage);

    startActivity(new Intent(EventStickyActivity.this, SendMessageActivity.class));

    MessageActivity页面:

    @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)

    public void eventStickyMessage(MyMessage myMessage){

            text.setText(myMessage.getMessage());

    }

    点击按钮,进行注册:

    //为防止多次注册,需要添加变量进行控制

    private boolean isFrist =true;

    if (isFrist) {

    isFrist =false;

    EventBus.getDefault().register(SendMessageActivity.this);

    }

    //反注册

    @Override

    protected void onDestroy() {

        EventBus.getDefault().removeAllStickyEvents();

        EventBus.getDefault().unregister(this);

        super.onDestroy();

    }

    相关文章

      网友评论

          本文标题:Android EventBus的使用

          本文链接:https://www.haomeiwen.com/subject/wrzzaltx.html