-
使得代码更简洁,避免出现复杂的依赖性和生命周期问题
-
体积小(大概只有50k 的 jar包)
EventBus的使用:
AS中添加gradle依赖:
dependencies {
implementation ‘org.greenrobot:eventbus:3.1.1’
}
如果你的应用app发布打包时开启了混淆,则需要在proguard-rules.pro中添加对应的混淆规则:
-keepattributes Annotation
-keepclassmembers class ** {
@org.greenrobot.eventbus.Subscribe ;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
使用之前了解EventBus的三个要素:
-
Event 事件。它可以是任意的Object类型,你可以自定义一个Class类。
-
Subscriber 事件订阅者。在EventBus3.0之前我们必须定义以onEvent开头的几个方法,分别是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件处理的方法名可以随意取,不过需要加上注解
@subscribe()
,并且指定线程模型,默认是POSTING
。 -
Publisher 事件的发布者。我们可以在任意线程里发布事件,一般情况下,使用EventBus.getDefault()就可以得到一个EventBus对象,然后再调用post(Object)方法即可。
EventBus的使用基本上分为简单的3个步骤:定义事件、注册事件订阅者、发布事件。
1.自定义一个事件:
public class MessageEvent {
private String message;
public MessageEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
2.注册并订阅事件:
EventBus的注册和反注册需要成对出现,一般在onCreate
和onDestroy
方法,或者在onStart
和onStop
方法中。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
订阅事件:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
…
}
这里方法名可以任意取,但必须添加@Subscribe
注解(这里指定线程模型为主线程),方法参数即前面自定义的事件类。
3.发布事件:
EventBus.getDefault().post(new MessageEvent(“Hello EventBus!”));
下面简单例子,点击MainActivity
按钮启动SecondActivity
, 在SecondActivity
中给MainActivity
页面发送一个消息
public class MainActivity extends Activity implements View.OnClickListener {
private final static String TAG = MainActivity.class.getSimpleName();
private Butto