使用 EventBus 3(Android 平台)的完整示例,涵盖事件定义、注册/注销、发送和接收事件,以及四种线程模式的使用场景
1. 添加依赖
在 build.gradle 中添加依赖:
dependencies {
implementation 'org.greenrobot:eventbus:3.3.1' // 使用最新版本
}
2. 定义事件类
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
3. 发送事件的 Activity
public class SenderActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sender);
Button btnSend = findViewById(R.id.btn_send);
btnSend.setOnClickListener(v -> {
// 发送事件
EventBus.getDefault().post(new MessageEvent("Hello from Sender!"));
finish(); // 关闭当前页面
});
}
}
4. 接收事件的 Activity
public class ReceiverActivity extends AppCompatActivity {
private TextView tvMessage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receiver);
tvMessage = findViewById(R.id.tv_message);
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this); // 注册EventBus
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this); // 注销EventBus(防内存泄漏)
}
// 主线程处理(可更新UI)
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEventMain(MessageEvent event) {
tvMessage.setText("MAIN: " + event.getMessage());
}
// 后台线程处理(避免阻塞UI)
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onMessageEventBackground(MessageEvent event) {
Log.d("EventBus", "BACKGROUND: " + event.getMessage());
}
// 异步线程处理(独立于UI和发布线程)
@Subscribe(threadMode = ThreadMode.ASYNC)
public void onMessageEventAsync(MessageEvent event) {
// 模拟耗时操作
SystemClock.sleep(2000);
Log.d("EventBus", "ASYNC: " + event.getMessage());
}
}
本文介绍了如何在Android应用中使用 EventBus 进行数据分发和接收,包括注册与注销事件监听器、发送数据示例以及关键的@Subscribe注解的使用。重点展示了如何通过 EventBus 实现组件间的高效通信。
931

被折叠的 条评论
为什么被折叠?



