Android的消息事件处理工具EventBus的使用方法

发表于 2020-11-12 17:16:49
阅读 30

介绍

介绍

在Android的APP开发里经常会用到一个功能,就是用户登录了需要“通知”所有Activity这一消息,所有Activity就是为“用户登录了”这个结果进行自身的准备工作。这就需要一个内部消息管理工具来实现这个,在c/c++里面可以有windows消息系统,在android里可以使用EventBus来实现这个目的。

网上有很多教程,但是他们封装来封装去弄到莫名其妙,福哥这里给出的是最基本的代码,很容易上手的。

准备

导入依赖

我们先导入依赖org.greenrobot:eventbus:3.1.1

implementation 'org.greenrobot:eventbus:3.1.1'

事件监听

注册事件监听

需要在那个Activity接收事件消息,就在哪个Activity注册事件监听

EventBus.getDefault().register(this);

注销事件监听

在Activity销毁的时候需要注销事件的监听回收资源,不然会造成APP越来越慢的问题

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

实时事件

所谓实时事件就是这边发送,那边接收,和即时通聊天软件一样的效果。

接收实时事件消息

建立一个事件消息的接收回调方法,通过这个方法可以拿到发送给这个Activity的事件消息,从而进一步进行相应的处理

@Subscribe(threadMode = ThreadMode.MAIN)
public void onGetMessage(String message) {
    Toast(message);
}

实时事件消息发送

通过EventBus的post方法就可以发送任意数据给注册事件监听的Activity了,福哥发送了一句话给事件监听活动页

String msg = "同福叫你回家吃饭了";
EventBus.getDefault().post(msg);

黏贴事件

黏贴事件类似公告,就是发的人随便发,收的人什么时候开始收都是从第一条开始逐条接收。

接收黏贴事件消息

黏贴事件消息和接收事件消息不太一样,接收事件必须是先注册才能接收,而黏贴事件消息则没有这个要求。黏贴事件消息会存在一个队列里面,事件消息发送之后再注册也可以“从头”阅读一遍。

@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onGetStickyEvent(String message) {
    Toast(message);
}

黏贴事件消息发送

通过EventBus的postSticky方法就可以发送任意数据给注册事件监听的Activity了,福哥发送了一句话给事件监听活动页

String msg = "同福叫你回家写代码啦";
EventBus.getDefault().postSticky(msg);

总结

有了EventBus工具,我们在实现用户注册/登录/修改头像/修改昵称等等功能的时候就简单了,可以通过EventBus通知所有的Activity更换当前用户的状态和信息了。