1、关于EventBus:

组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大。例如多个Fragment之间的数据传递,Service与Activity、Fragment之间的通讯,BroadCast与Activity、Fragment之间的通讯,各种startActivityForResult的使用,繁杂的操作令我们所厌倦,在GitHub上找了下解决方案,发现了一个不错的开源库EventBus,相信很多做过Android开发的朋友都或多或少对此有所了解。

  EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。

  这是EventBus在GitHub上的开源库地址:https://github.com/greenrobot/EventBus

安卓开发笔记——探索EventBus(转)

  EventBus的大体关系是这样的:订阅者(Subscriber)通过订阅事件(Event)到总线,事件发布者(Publisher)发布事件(Event)到总线被订阅者(Subscriber)接收,其实说白了就是软件设计模式里的观察者模式。EventBus在使用的时候就是在合适的地方发布一个事件,使得注册了该事件接收的对象就可以收到通知,进行相应的操作。

2、初探EventBus:

  文绉绉的文字描述令人厌烦,直接上代码说话吧,先来看下要实现的效果:

  安卓开发笔记——探索EventBus(转)

  看似很简单的效果,点击按钮跳转界面,利用Intent发送一个消息,然后TextView接收显示。这是传统上的做法,如果真是这样做,那么写这篇文章的就完全没意义了。其实这里就是利用到了EventBus,并没有用到Intent来传递消息。

  先来看下具体的代码(记得添加EventBus的引用),然后我再分部来解析:

安卓开发笔记——探索EventBus(转)
 1 package com.lcw.rabbit.eventbusdemo.eventbusdemo;
 2 
 3 import android.content.Intent;
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.TextView;
 9 
10 import de.greenrobot.event.EventBus;
11 
12 public class MainActivity extends AppCompatActivity {
13 
14     private Button mBt_1;
15     private TextView mTv_1;
16 
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         //注册绑定EventBus
22         EventBus.getDefault().register(this);
23 
24         initView();
25         initAction();
26 
27     }
28 
29     private void initAction() {
30         mBt_1.setOnClickListener(new View.OnClickListener() {
31             @Override
32             public void onClick(View v) {
33                 startActivity(new Intent(MainActivity.this, SecondActivity.class));
34             }
35         });
36     }
37 
38     private void initView() {
39         mBt_1 = (Button) findViewById(R.id.bt_1);
40         mTv_1 = (TextView) findViewById(R.id.tv_info1);
41     }
42 
43 
44     //接收所订阅的消息
45     public void onEventMainThread(MyEvent myEvent) {
46         if (myEvent.getInfo()!=null) {
47             mTv_1.setText(myEvent.getInfo());
48         }
49 
50     }
51 
52 
53     @Override
54     protected void onDestroy() {
55         super.onDestroy();
56         //解绑EventBus
57         EventBus.getDefault().unregister(this);
58     }
59 }
安卓开发笔记——探索EventBus(转)

相关文章:

  • 2021-08-28
  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-11
  • 2021-08-12
  • 2021-09-19
猜你喜欢
  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
  • 2021-10-26
  • 2021-12-03
  • 2021-12-23
相关资源
相似解决方案