概述
EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅者简化Android事件传递,这里的事件可以理解为消息。事件传递既可以用于Android四大组件间通讯,也可以用于异步线程和主线程间通讯等。
传统的事件传递方式包括:Handler、BroadcastReceiver、Interface回调,相比之下EventBus的有点是代码简洁,使用简单,并将事件发布和 订阅充分解耦
1.第一步添加类库, //eventbus传递信息 implementation 'org.greenrobot:eventbus:3.1.1'
2.通俗的说
建一个A类(接收的),
onCreate里面注册
EventBus.getDefault().register(this);
onDestroy里面解注册
EventBus.getDefault().unregister(this);
在创建订阅方法,当接收到事件的时候,会调用该方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(Event messageEvent) {
Log.e("TAG", "------------>"+ messageEvent.getMessage());
Toast.makeText(MainActivity.this, messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
}
创建一个实体类
public class Event {
private String message;
public Event(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
在B类中发送消息,A类中onEvent方法中接收
B类中发送消息事件
//发送事件
EventBus.getDefault().post(new Event("Just do it"));
build.gradle中添加//eventbus传递信息
implementation 'org.greenrobot:eventbus:3.1.1'
完整代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnClickListener(this);
//注册事件
EventBus.getDefault().register(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button://点击进去另一个类,在另一个类中发消息事件
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
break;
}
}
//订阅方法,当接收到事件的时候,会调用该方法
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(Event messageEvent) {
Log.e("TAG", "------------>"+ messageEvent.getMessage());
Toast.makeText(MainActivity.this, messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
}
//解注册
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
另一个类
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
Button login_image_QQlogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
login_image_QQlogin = findViewById(R.id.login_image_QQlogin);
login_image_QQlogin.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.login_image_QQlogin :
new Thread(new Runnable() {
@Override
public void run() {
//发送事件
EventBus.getDefault().post(new Event("Just do it"));
}
}).start();
break;
}
}
}
实体类
public class Event {
private String message;
public Event(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
在哪接收事件就在哪个类中注册解注册,重写接收方法,深入了解EventBus的话建议去官网看看源码
本文介绍EventBus在Android中的应用,展示如何通过简单的代码实现事件的发布与订阅,提高组件间的解耦,包括添加依赖、注册与解注册、创建实体类及发送与接收消息等步骤。
4307

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



