【Android】EventBus 之 发布事件(上)
【爱迪的懂】 本篇博客是关于EventBus 的基本使用步骤,一起来学习吧!
一. 整体流程
1. 添加 EventBus依赖 :
implementation 'org.greenrobot:eventbus:3.1.1'
2. 注册:
EventBus.getDefault().register(this);
3. 解注册:
EventBus.getDefault().unregister(MainActivity.this);
4. 构造消息发送类
5. 发布消息
EventBus.getDefault().post(new MessageInfo("消息类参数"));
6. 接收消息(共四种线程模型)
ThreadMode.MAIN 表示此方法在主线程中执行
ThreadMode.BACKGROUND 表示此方法在后台执行,不能并发处理
ThreadMode.ASYNC 表示此方法在后台执行,可异步并发处理
ThreadMode.POSTING 表示该方法和消息发送方法在同一个线程中执行
二. 效果
点击图一界面(MainActivity)按钮,跳转到图二界面
再点击图二界面(SecondActivity)按钮发布消息,同时销毁图二界面,返回到图一界面,显示接收到的消息。
三. 步骤
添加依赖
implementation 'org.greenrobot:eventbus:3.1.1'
1. MainActivity
1 public class MainActivity extends AppCompatActivity {
2 private Button button_1;
3 private TextView text_1;
4
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_main);
9
10 init();
11 initData();
12 }
13
14 //初始化控件
15 private void init() {
16 button_1 = findViewById(R.id.button_1);
17 text_1 = findViewById(R.id.text_1);
18 }
19
21 private void initData() {
22 //2.注册 EventBus,将当前Activity绑定为订阅者
23 EventBus.getDefault().register(MainActivity.this);
24
25 //添加点击监听,点击跳转到 SecondActivity界面
26 button_1.setOnClickListener(new View.OnClickListener() {
27 @Override
28 public void onClick(View v) {
29 Intent intent = new Intent(MainActivity.this,SecondActivity.class);
30 startActivity(intent);
31 }
32 });
33 }
34
35 //3. 解除注册,解绑
36 @Override
37 protected void onDestroy() {
38 super.onDestroy();
39 EventBus.getDefault().unregister(MainActivity.this);
40 }
41
42
43 //6.回调方法,接收消息,前提加注解
44 @Subscribe(threadMode = ThreadMode.MAIN)
45 public void onMessageMode(MessageInfo event){
46 text_1.setText(event.getFanName() + "刷到了" + event.getMessage() + "的动态。");48 }
49 }
2.SecondActivity
1 public class SecondActivity extends AppCompatActivity {
2 private Button button_2;
3 private TextView text_2;
4
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_second);
9
10 init();
11 initDate();
12 }
13
14 private void init() {
15 button_2 = findViewById(R.id.button_2);
16 text_2 = findViewById(R.id.text_2);
17 }
18
19 private void initDate() {
20 button_2.setOnClickListener(new View.OnClickListener() {
21 @Override
22 public void onClick(View v) {
23
24 //5. 发布消息
25 EventBus.getDefault().post(new MessageInfo("a","吃饭了"));
26
27 //销毁活动
28 finish();
29 }
30 });
31 }
32 }
3. 我构造的消息发送类
1 public class MessageInfo {
2 private String fanName;//名字
3 private String message;//信息
4
5 public MessageInfo(String fanName, String message) {
6 this.fanName = fanName;
7 this.message = message;
8 }
9
10 public String getFanName() {
11 return fanName;
12 }
13
14 public void setFanName(String fanName) {
15 this.fanName = fanName;
16 }
17
18 public String getMessage() {
19 return message;
20 }
21
22 public void setMessage(String message) {
23 this.message = message;
24 }
25 }
参考博客:https://www.jianshu.com/p/e7d5c7bda783