EventBus是一种用于Android的事件发布-订阅,在不相互依赖的情况下进行组件间的通信,降低耦合。
使用方式:
1.添加依赖 implementation("org.greenrobot:eventbus:3.3.1")
2.注册 EventBus.getDefault().register(this);
3.注销 EventBus.getDefault().unregister(this);
4.接收事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(Message message) {}
5.发送消息
EventBus.getDefault().post(new Message());
注意:Eventbus无法跨进程。
手写EventBus框架
流程图:
源码:
MyEventBus.java
/**
* EventBus核心类
*/
public class MyEventBus {
private static MyEventBus myEventBus;
private Map<Object, List<SubscribeMethod>> mCacheMap;
private Handler mHandler;
// 没有核心线程,只有非核心线程,并且每个非核心线程空闲等待的时间为60s,采用SynchronousQueue队列。
private ExecutorService mExecutorService;
public MyEventBus() {
mCacheMap = new HashMap<>();
mHandler = new Handler(Looper.getMainLooper());
mExecutorService = Executors.newCachedThreadPool();
}
public static MyEventBus getDefault() {
if (myEventBus == null) {
synchronized (MyEventBus.class) {
if (myEventBus == null) {
myEventBus = new MyEventBus();
}
}
}
return myEventBus;
}
// 注册
public void register(