介绍
介绍
在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更换当前用户的状态和信息了。