2.5 KiB
2.5 KiB
EventBus原理
目录
EventBus原理
定义
// EventBus:事件总线
// 基于观察者模式
// 组件间解耦通信
核心概念
// 1. Event:事件
// 2. Subscriber:订阅者
// 3. Publisher:发布者
事件总线
架构
// EventBus 使用单例模式
// 维护订阅者列表
// 事件发布时,通知所有订阅者
订阅机制
订阅事件
// 注册订阅者
EventBus.getDefault().register(this);
// 订阅方法
@Subscribe
public void onEvent(MessageEvent event) {
// 处理事件
}
// 注销订阅者
EventBus.getDefault().unregister(this);
发布事件
// 发布事件
EventBus.getDefault().post(new MessageEvent("Hello"));
线程模式
线程模式类型
// 1. POSTING:发布线程(默认)
@Subscribe(threadMode = ThreadMode.POSTING)
// 2. MAIN:主线程
@Subscribe(threadMode = ThreadMode.MAIN)
// 3. BACKGROUND:后台线程
@Subscribe(threadMode = ThreadMode.BACKGROUND)
// 4. ASYNC:异步线程
@Subscribe(threadMode = ThreadMode.ASYNC)
EventBus源码分析
关键类
// EventBus:事件总线
// SubscriberMethodFinder:订阅方法查找
// Subscription:订阅信息
关键流程
// 1. register():注册订阅者
// 2. findSubscriberMethods():查找订阅方法
// 3. post():发布事件
// 4. postToSubscription():通知订阅者
EventBus最佳实践
1. 及时注销
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
2. 使用合适的线程模式
// 根据需求选择线程模式
@Subscribe(threadMode = ThreadMode.MAIN)
面试常见问题
Q1: EventBus 的原理?
答案:
- 基于观察者模式
- 维护订阅者列表
- 事件发布时通知所有订阅者
Q2: EventBus 的线程模式?
答案:
- POSTING:发布线程
- MAIN:主线程
- BACKGROUND:后台线程
- ASYNC:异步线程
Q3: EventBus 的优缺点?
答案:
- 优点:解耦、易用
- 缺点:可能内存泄漏、难以追踪
最后更新:2024年